gpt4 book ai didi

java - ViewPager 与 AsyncTaskLoader

转载 作者:行者123 更新时间:2023-12-02 05:55:25 25 4
gpt4 key购买 nike

好吧,我很难理解我的应用程序出了什么问题。所以我有带有这样的选项卡的 ViewPager:

适配器.java

public class CustomPagerAdapter extends FragmentPagerAdapter {

public CustomPagerAdapter(FragmentManager fm) {
super(fm);
}

@Override
public Fragment getItem(int position) {
switch (position) {
case 0:
return new Fragment1();
case 1:
return new Fragment2();

// And so on...

@Override
public int getCount() {
return 4;
}

这是 xml:

<android.support.v4.view.ViewPager xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.env.test.app.MainActivity" />

主要 Activity :

public class MainActivity extends FragmentActivity implements ActionBar.TabListener {

static final String[] tabTitles = {"test1","test2","test3","tes3"};
CustomPagerAdapter adapter;
ViewPager viewPager;
ActionBar actionBar;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

adapter = new CustomPagerAdapter(getSupportFragmentManager());
actionBar = getActionBar();
viewPager = (ViewPager) findViewById(R.id.pager);

viewPager.setAdapter(adapter);
actionBar.setHomeButtonEnabled(false);
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

for (String tabTitle : tabTitles) {
actionBar.addTab(actionBar.newTab().setText(tabTitle).setTabListener(this));

}

viewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {

@Override
public void onPageSelected(int position) {
actionBar.setSelectedNavigationItem(position);
}

@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
super.onPageScrolled(position, positionOffset, positionOffsetPixels);
}

@Override
public void onPageScrollStateChanged(int state) {
super.onPageScrollStateChanged(state);
}
});
} // And 3 more implemented methods of tabs...

在每一个 fragment 中,我都使用 Jsoup scrape 和 CardListView 填充来调用 AsyncTaskLoader。现在一切正常,但假设我在第 1 页。我滑入第3页。然后我滑回 page1,内容 (ListView) 就消失了。现在我再次滑动到第3页或第4页,也没有内容。所以,长话短说,我正在丢失数据(尝试过 AsyncTask,但我更喜欢加载程序,问题是相同的,所以我不认为问题出在加载程序中)。然而,这是其中一个 fragment :

public class Fragment1 extends Fragment implements LoaderManager.LoaderCallbacks<ArrayList<Card>> {

SharedPreferences accountData;
String accountID, accountPassword;

public Fragment1() {

}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment1, container, false);
return view;
}

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

accountData = getActivity().getSharedPreferences(otheractivity.filename, 0);
accountID = accountData.getString("accountID", null);
accountPassword = accountData.getString("accountPassword", null);

getActivity().getSupportLoaderManager().initLoader(0, null, this);
}

@Override
public Loader<ArrayList<Card>> onCreateLoader(int id, Bundle args) {
return new NetworkTask(getActivity(), accountID, accountPassword, getString(R.string.login_url), getString(R.string.target_url));
}

@Override
public void onLoadFinished(Loader<ArrayList<Card>> loader, ArrayList<Card> result) {
if (result != null) {
CardArrayAdapter adapter = new CardArrayAdapter(getActivity(), result);
CardListView cardListView = (CardListView) getActivity().findViewById(R.id.listView_schedule);
if (cardListView != null) {
cardListView.setAdapter(adapter);
}
} else {
TextView warning = (TextView) getActivity().findViewById(R.id.textView_sheduleWarning);
warning.setText("blah blah blah");
}
}

@Override
public void onLoaderReset(Loader<ArrayList<Card>> loader) {
}

}

有什么想法是错的吗?也许与 PagerAdapter 或 CardArrayAdapter 有关?谢谢;)

最佳答案

有两种方法可以解决这个问题。

  1. 将所有 fragment 加载在一起。用于此用途pager.setOffscreenPageLimit(numberOfFragments);将适配器设置为 vipager 后立即进行。

  2. 删除从onCreate()到onCreateView()的代码当您在 viewpager 中滑动时,fragment 会重新加载并调用其 OncreateView() 。

关于java - ViewPager 与 AsyncTaskLoader,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23138613/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com