私はかなり基本的なことをしようとしていますが、うまくいかないようです。
私は a を持っており、 aViewPager
を使用しFragmentPagerAdapter
てフラグメントを入力しています。私は常に3つのフラグメント(A、B、Cと呼びます)を持ち、フラグメントCIには単純なListView
. ユーザーがその ListView の項目をクリックするたびに、そのリスト項目に関連する詳細を表示する新しいフラグメント (フラグメント D) を ViewPager に追加したいと考えています。
ユーザーがフラグメント C に戻った場合、別のリスト項目をクリックすると、フラグメント D の内容が他の詳細で更新されます。
これは PageAdapter のコードです。
public class TopPagerAdapter extends FragmentPagerAdapter {
private final ArrayList<Fragment> fragments = new ArrayList<Fragment>();
public TopPagerAdapter(FragmentManager fm) {
super(fm);
fragments.add(0, new FragmentA());
fragments.add(1, new FragmentB());
fragments.add(2, new FragmentC());
}
@Override
public Fragment getItem(int position) {
return fragments.get(position);
}
@Override
public int getCount() {
return fragments.size();
}
@Override
public CharSequence getPageTitle(int position) {
return null;
}
public void addFragmentD(FragmentD frag) {
fragments.add(3, frag);
notifyDataSetChanged();
}
public void removeFragmentD() {
fragments.remove(3);
notifyDataSetChanged();
}
}
そして、これがどのように使用されるか (ユーザーがフラグメント C のリスト項目をクリックしたとき):
rowView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
FragmentD frag = new FragmentD();
Bundle args = new Bundle();
args.putString("name", mName.getText().toString());
frag.setArguments(args);
adapter.addFragmentD(frag);
}
});
これが Fragment D の実際のコードです (渡されたバンドルを取得して表示するだけです)。
public class FragmentD extends Fragment {
private Context mContext;
private TextView mName;
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
this.mContext = activity;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_d, container, false);
mName= (TextView) view.findViewById(R.id.name);
String name = (String) getArguments().get("name");
mName.setText(name);
return view;
}
}
最終的な結果として、FragmentD が正しく追加され、バンドル経由で渡された正しい情報が表示されますが、これは初回のみ機能します。FragmentC に戻って別のリスト項目をクリックすると、同じ FragmentD が表示され、FragmentD の新しいインスタンスを作成しているにもかかわらず、そのonCreateView
メソッドが呼び出されません。あたかもメモリに残り、決して削除されないかのようです。
これを機能させる方法はありますか?ありがとう。