1

データのページを左右に反転するためにaFragmentActivityを使用するがあります (two )。ViewPagerListFragments

public class StopsActivity extends FragmentActivity {
   private ViewPager mViewPager;
   private PagerTabStrip mPagerTabStrip;

   public void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.activity_stops);

     mPagerTabStrip =(PagerTabStrip)findViewById(R.id.pager_header);
     mViewPager = (ViewPager)findViewById(R.id.pager);

     mPagerTabStrip.setDrawFullUnderline(true);
     mPagerTabStrip.setTabIndicatorColorResource(R.color.pagerTabStrip);
     mViewPager.setAdapter(new StopsAdapter(getSupportFragmentManager()));
     mViewPager.setCurrentItem(0);
   }

   private class StopsAdapter extends FragmentPagerAdapter {
     public StopsAdapter(FragmentManager fm) {
        super(fm);
     }

     @Override
     public Fragment getItem(int position) {
        switch (position) {
           case 0:
             return StopsFragment.newInstance(routename, Stop.FORWARD);
           case 1:
             return StopsFragment.newInstance(routename, Stop.BACKWARD);
        }
        return null;
     }

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

     @Override
     public CharSequence getPageTitle(int position) { /* implementation ... */}
   }
} 

すべてが正常に実行されますが、2 番目のインスタンスが呼び出されるとStopFragment、最初のインスタンスのデータが無効になると思います。getItem

public class StopsFragment extends ListFragment {
   private StopsAdapter mStopsAdapter;
   private ListView mListView;
   private String routename;
   private int direction;

  public static StopsFragment newInstance(String routename, int direction) {
     StopsFragment stopsFragment = new StopsFragment();

     // Supply arguments
     Bundle args = new Bundle();
     args.putString("routename", routename);
     args.putInt("direction", direction);
     stopsFragment.setArguments(args);
     return stopsFragment;
  }

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

     // Setup the adapter
     ArrayList<Stop> stops = ...
     mStopsAdapter = new StopsAdapter(getActivity(), stops);

     setRetainInstance(true);
  }

  @Override
  public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle inState) {
     View rootView = inflater.inflate(R.layout.fragment_stops, container, false);
     // Attach the adapter
     mListView = (ListView) rootView.findViewById(android.R.id.list);
     mListView.setAdapter(mStopsAdapter);
     return rootView;
  }

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

ページ「IDA」はStopFragmentwith 引数Stop.FORWARDに対応し、ページ「VUELTA」はStopFragmentwith 引数に対応しますStop.BACKWARD。以下の画像でわかるように、そのうちの 1 つ (最後のインスタンス化) だけが読み込まれます。

私が間違っていることは何ですか?

編集

これはStopsAdapter

class StopsAdapter extends BaseAdapter {
   private ArrayList<Stop> stops;
   private LayoutInflater inflater;

   public StopsAdapter(Context context, ArrayList<Stop> stops) {
      this.stops = stops;
      this.inflater = LayoutInflater.from(context);
   }

   @Override
   public int getCount() {
      return stops.size();
   }

   @Override
   public Object getItem(int position) {
      return stops.get(position);
   }

   @Override
   public long getItemId(int position) {
      return (long)position;
   }

   public View getView(int position, View convertView, ViewGroup parent) {
      if (convertView == null) {
        convertView = inflater.inflate(R.layout.item_stop, parent, false);
      }
      TextView name = (TextView)convertView.findViewById(R.id.tvStopName);
      TextView description = (TextView)convertView.findViewById(R.id.tvStopDescription);
      Stop stop = (Stop)getItem(position);
      name.setText(stop.name);
      if (stop.info != null) {
         description.setText(stop.info);
      }

      return convertView;
   }
}
4

1 に答える 1