Проблема с ViewPager Tabs
Добавлено: 13 фев 2013, 11:44
Доброго времени суток, у меня такая проблема. Есть три Tab, при скроллинге пропадает содиржимое ListView из первого Tab. Не могу понять почему пропадает содержимое.
Вот код;
MyActivity:
PagerAdapter:
TabFragment:
main.xml
list_item.xml
view_pager.xml
Вот код;
MyActivity:
Код: Выделить всё
public class MyActivity extends FragmentActivity implements ActionBar.TabListener {
static private final String TAG = "MyActivity";
//TODO: move to settings
static private final String url = "http://some/path/to/app.xml";
static public final String appUrl = "url";
private ListView listView;
private List<App> apps;
private ListViewAdapter listViewAdapter = null;
private Runnable downloadingFailed = new Runnable() {
@Override
public void run() {
//TODO: show bad message
Log.d(TAG, "Runnable downloadingFailed");
finish();
}
};
private Runnable downloadingFinished = new Runnable() {
@Override
public void run() {
Log.d(TAG, "Runnable downloadingFinished, xml.length == " + xmlHttpLoader.getXml().length());
ListParser parser = new ListParser();
parser.parse(xmlHttpLoader.getXml());
apps = parser.getResult();
if(apps.size() > 0) {
createListView();
}
else {
Log.e(TAG, "Dont have any application description");
}
}
};
XmlHttpLoader xmlHttpLoader;
Handler handler;
private PagerAdapter mPagerAdapter;
private ViewPager mViewPager;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.view_pager);
mPagerAdapter = new PagerAdapter(getSupportFragmentManager());
final ActionBar actionBar = getActionBar();
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
mViewPager = (ViewPager) findViewById(R.id.pager);
mViewPager.setAdapter(mPagerAdapter);
mViewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
public void onPageSelected(int position) {
actionBar.setSelectedNavigationItem(position);
}
});
for (int i = 0; i < mPagerAdapter.getCount(); i++) {
actionBar.addTab(actionBar.newTab().setText(mPagerAdapter.getPageTitle(i)).setTabListener(this));
}
handler = new Handler();
xmlHttpLoader = new XmlHttpLoader(url, handler, downloadingFinished, downloadingFailed);
//Start downloading
xmlHttpLoader.start();
}
public void onTabUnselected(ActionBar.Tab tab,FragmentTransaction fragmentTransaction) {
}
public void onTabSelected(ActionBar.Tab tab,FragmentTransaction fragmentTransaction) {
mViewPager.setCurrentItem(tab.getPosition());
}
public void onTabReselected(ActionBar.Tab tab,FragmentTransaction fragmentTransaction) {
}
private void createListView()
{
Log.d(TAG,"createListView()");
listView = (ListView) findViewById(R.id.lvAp);
listViewAdapter = new ListViewAdapter(this, R.layout.list_item, apps);
listView.setAdapter(listViewAdapter);
listView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Intent i = new Intent(getApplicationContext(), ItemActivity.class);
i.putExtra(appUrl, listViewAdapter.getItem(position).getUrl());
startActivity(i);
}
});
}Код: Выделить всё
public class PagerAdapter extends FragmentPagerAdapter {
final int NUM_ITEMS = 3; // number of tabs
public PagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int i) {
Fragment fragment = new TabFragment();
Bundle args = new Bundle();
args.putInt(TabFragment.ARG_OBJECT, i);
fragment.setArguments(args);
return fragment;
}
public int getItemPosition(Object object){
return POSITION_NONE;
}
@Override
public int getCount() {
return NUM_ITEMS;
}
public CharSequence getPageTitle(int position) {
String tabLabel = null;
switch (position) {
case 0:
tabLabel = ("Всё");
break;
case 1:
tabLabel = ("Пульт");
break;
case 2:
tabLabel = ("Мышь");
break;
}
return tabLabel;
}
}Код: Выделить всё
public class TabFragment extends Fragment {
public static final String ARG_OBJECT = "object";
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
Bundle args = getArguments();
int position = args.getInt(ARG_OBJECT);
int tabLayout = 0;
switch (position) {
case 0:
tabLayout = R.layout.main;
break;
case 1:
tabLayout = R.layout.tab1;
break;
case 2:
tabLayout = R.layout.tab2;
break;
}
View rootView = inflater.inflate(tabLayout, container, false);
return rootView;
}
}Код: Выделить всё
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ListView
android:id="@+id/lvAp"
android:layout_width="match_parent"
android:layout_height="fill_parent">
</ListView>
</LinearLayout>Код: Выделить всё
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:padding="5dp"
android:layout_marginLeft="50dp">
<ImageView
android:id="@+id/apImage"
android:layout_width="98dp"
android:layout_height="98dp"
android:src="@drawable/ic_launcher"
android:contentDescription="@string/app_name"/>
<TextView
android:id="@+id/apName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:layout_alignTop="@+id/apImage"
android:layout_toRightOf="@+id/apImage"
android:text="@string/apName"
android:textSize="26dp"
android:textStyle="bold"/>
<TextView
android:id="@+id/apDescription"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:layout_below="@+id/apName"
android:layout_toRightOf="@id/apImage"
android:text="@string/apDescription"
android:textSize="18dp"
android:textStyle="bold"/>
<TextView
android:id="@+id/wVersion"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="900dp"
android:text="@string/wVersion"
android:layout_marginTop="10dp"
android:textSize="18dp"
android:textStyle="bold"/>
<TextView
android:id="@+id/apVersion"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:layout_marginLeft="5dp"
android:layout_toRightOf="@+id/wVersion"
android:text="@string/apVersion"
android:textSize="18dp"
android:textStyle="bold"/>
<RatingBar
android:id="@+id/apRating"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:numStars="5"
android:layout_below="@+id/apVersion"
android:layout_marginTop="10dp"
android:layout_marginLeft="935dp"
style="?android:attr/ratingBarStyleSmall"
android:clickable="true"
/>
</RelativeLayout>Код: Выделить всё
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="5dp"
android:id="@+id/appLayout"
android:layout_marginLeft="120dp"
android:layout_marginRight="120dp">
<android.support.v4.view.ViewPager
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
</LinearLayout>