0

ListView といくつかのボタンを使用して DialogFragment を作成しようとしています。それらすべてをレイアウトファイルで宣言しており、ボタンは正常に機能していますが、fineViewByID() を使用すると ListView が null になります。

ここに私のxmlがあります:

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/category_picker" 
    android:layout_gravity="center" 
    android:orientation="vertical" >

    <ListView
        android:id="@+id/lvCategorys"
        android:layout_width="wrap_content"
        android:layout_height="fill_parent"
        android:layout_weight="0.5" >

    </ListView>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="100dp"
        android:layout_gravity="bottom"
        android:layout_weight="0.5"
        android:orientation="horizontal" >

        <Button
            android:id="@+id/btnAddNew"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="0.5"
            android:text="@string/cpf_btnAddNew" />

        <Button
            android:id="@+id/btnConfig"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="0.5"
            android:text="@string/cpf_btnConfig" />

    </LinearLayout>
</LinearLayout>

FragmentDialog は次のとおりです。 package com.example.spendo.fragments;

    imports....


    public class CategoryPickerFragment extends DialogFragment implements OnItemClickListener{
    private CategoryGroup categoryGroup;
    private ListView lvCategorys;
    private ArrayAdapter<String> lvAdapter;

    private Button btnAddNew, btnConfig;


    public CategoryPickerFragment() {
        // Empty constructor required for DialogFragment
    }
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_category_picker, container);
        getDialog().setTitle("Hello");

        categoryGroup = General.getActiveCategoryGroup(this.getActivity());
        System.out.println(categoryGroup);

        btnAddNew = (Button) this.getActivity().findViewById(R.id.btnAddNew);
        btnConfig = (Button) this.getActivity().findViewById(R.id.btnConfig);
        lvCategorys = (ListView) this.getActivity().findViewById(R.id.lvCategorys);
        if(lvCategorys == null){ //this returns "lvCategorys is null"
            System.out.println("lvCategorys is null");
        }else{
            System.out.println(lvCategorys + " is not null");
        }

        lvAdapter = new ArrayAdapter<String>(this.getActivity(),android.R.layout.simple_list_item_1, categoryGroup.getNameArray());
        System.out.println(lvAdapter);
        ArrayList<String> nameArray = categoryGroup.getNameArray();
        lvAdapter.clear();
        for(int i = 0; i < nameArray.size(); i++){
            lvAdapter.add((String) nameArray.get(i));
        }
        lvAdapter.notifyDataSetChanged();
        lvCategorys.setAdapter(lvAdapter);



        return view;
    }
    @Override
    public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
        // TODO Auto-generated method stub

    }

    }

誰かが私の問題を見ていますか。(私は過去にいくつかのJavaを行ったことがありますが、Androidにはまったく慣れていません)。

//Sverker

4

1 に答える 1

2

交換する必要があると思います

btnAddNew = (Button) this.getActivity().findViewById(R.id.btnAddNew);
btnConfig = (Button) this.getActivity().findViewById(R.id.btnConfig);
lvCategorys = (ListView) this.getActivity().findViewById(R.id.lvCategorys);

btnAddNew = (Button) view.findViewById(R.id.btnAddNew);
btnConfig = (Button) view.findViewById(R.id.btnConfig);
lvCategorys = (ListView) view.findViewById(R.id.lvCategorys);
于 2012-11-26T12:36:30.083 に答える