1

カスタム 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 であることを除いて、すべてが期待どおりに機能します。

4

0 に答える 0