カスタム ArrayAdapter を使用してリストビューを設定する ListFragment があります。これはうまくいきます。しかし、「exerciseSetsItemAdapter.notifyDataSetChanged();」でリストビューに新しいリストアイテムを追加しようとすると できません。何らかの理由で onActivityCreated() 以外のすべてが null です。
public class SingleExListFragment extends SherlockListFragment {
ArrayList<ExerciseSetsRecord> sets= new ArrayList<ExerciseSetsRecord>();
public ExerciseSetsItemAdapter exerciseSetsItemAdapter;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.single_exercise, container, false);
return v;
}
public void onCreate(Bundle sa)
{
Log.d("Tag1", "ONCREATE!!!!");
super.onCreate(sa);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
ExerciseSetsRecord exerciseSetsRecord1 = new ExerciseSetsRecord(1, 0, 0);
sets.add(exerciseSetsRecord1);
ExerciseSetsRecord exerciseSetsRecord2 = new ExerciseSetsRecord(2, 0, 0);
sets.add(exerciseSetsRecord2);
ExerciseSetsRecord exerciseSetsRecord3 = new ExerciseSetsRecord(3, 0, 0);
sets.add(exerciseSetsRecord3);
exerciseSetsItemAdapter = new ExerciseSetsItemAdapter(getActivity(),
android.R.layout.simple_list_item_1, sets);
setListAdapter(exerciseSetsItemAdapter);
Log.d("Tag1", "onActivitycreated: " + exerciseSetsItemAdapter);
Utility.setListViewHeightBasedOnChildren(getListView());
}
public void addSet(){
Log.d("Tag1", "onClick Fragment" + exerciseSetsItemAdapter + " sets " + sets);
ExerciseSetsRecord exerciseSetsRecord4 = new ExerciseSetsRecord(1, 0, 0);
sets.add(exerciseSetsRecord4);
// exerciseSetsItemAdapter.notifyDataSetChanged();
}
}
logcat onCreate:
07-05 12:37:44.855: DEBUG/Tag1(18853): onCreate singleexlistfrag SingleExListFragment{4171f760} 07-05 12:37:44.865: DEBUG/Tag1(18853): ONCREATE!!!!
07-05 12:37:44.875: DEBUG/Tag1 (18853): onActivitycreated: com.example.ExerciseSetsItemAdapter@416f1bf0
最初はfragmentactivityでフラグメントが作成されたとき、最後はそのフラグメントでonActivityCreatedです。
ボタンのクリック:
07-05 12:38:58.070: DEBUG/Tag1(18853): addClickHandlerSingleExListFragment{4171f760}
07-05 12:38:58.070: DEBUG/Tag1(18853): onClick Fragmentnull セット []
1 つ目は、アクティビティの onclick メソッドです。2 つ目は、フラグメントのメソッド addSet です。ご覧のとおり、ArrayAdapter と ArrayList は null です。
ここで何が問題なのですか?
Edit @ Goofyahead: ListFragments FragmentActivity で AddSet() が呼び出されます。
public void addClickHandler(View target){
Log.d("Tag1", "addClickHandler" +singleExListFragment);
singleExListFragment.addSet();
}
xml に OnClick があります。
フラグメントは、次のように FragmentActivity でインスタンス化されます。
SingleExListFragment singleExListFragment;
...
mTabsAdapter.addTab(mTabHost.newTabSpec("exercises").setIndicator("Exercise"),
singleExListFragment.getClass(), null);
「AddSet」でセットと ExerciseItemAdapter が null であることを除いて、すべてが期待どおりに機能します。