在ListFragment中的onActivityCreated之外,ArrayAdapter为null

时间:2012-07-05 10:44:30

标签: android android-fragments android-arrayadapter android-listfragment

我有一个ListFragment,它使用自定义ArrayAdapter来填充列表视图。这很好用。但是当我尝试使用“exerciseSetsItemAdapter.notifyDataSetChanged();”将新的listitem添加到listview时我不能,因为某些原因,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

首先是在片段活动中创建片段,最后是片段中的onActivityCreated。

按钮点击:
07-05 12:38:58.070:DEBUG / Tag1(18853):addClickHandlerSingleExListFragment {4171f760}
07-05 12:38:58.070:DEBUG / Tag1(18853):onClick Fragmentnull sets []

首先是活动中的onclick方法 第二个是Fragment中的方法addSet。现在,正如您所看到的,我的ArrayAdapter是null,还有我的ArrayList。

这里有什么问题???

编辑@ 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”中的sets和ExerciseItemAdapter为null外,一切都按预期工作。

0 个答案:

没有答案