0

を作成しようとしていますListFragment。リストの各行には、画像とテキストが含まれています。これによく似ています。を使用してビューを実装するアプローチに従っていますArrayAdapter

しかし、ArrayAdapter の getView() 内でNullPointerException @を取得していますLayoutInflater inflater = fragmentContext.getLayoutInflater(null);

コード :

ArrayAdapter クラス:

public class MyListAdapter extends ArrayAdapter {

    Context context;
    String[] items;
    Fragment fragmentContext;

    public MyListAdapter(Context c, int textViewResourceId, String[] listItmes,
            Fragment fragmentContext) {
        super(c, textViewResourceId, listItmes);
            this.items = listItmes;
        }
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View view = convertView;
        if (view == null) {
            LayoutInflater inflater = fragmentContext.getLayoutInflater(null);
            view.inflate(context, R.layout.my_row, null);
        }
        if (items != null) {
            TextView tv_my_list_item_title = (TextView) view
                    .findViewById(R.id.tv_my_list_item_title);
            if (tv_my_list_item_title != null) {
                tv_my_list_item_title.setText(items[position]);
            }
        }
        return view;
    }
}

リストフラグメント:

public class MyFragment extends ListFragment {

    int mCurCheckPosition = 0;
    String[] listItems = null;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.mylayout, null);
        listItems = getResources().getStringArray(R.array.my_element_list);
        return view;
    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);

        // Populate list with our static array of titles.
        //ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(),
        //      android.R.layout.simple_list_item_1, listItems);
        MyListAdapter adapter = new MyListAdapter(getActivity(), R.layout.my_row, listItems, this);

        setListAdapter(adapter);

        if (savedInstanceState != null) { // Restore last state for checked position.
            mCurCheckPosition = savedInstanceState.getInt("curChoice", 0);
        }
    }

    @Override
    public void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        outState.putInt("curChoice", mCurCheckPosition);
    }

    @Override
    public void onListItemClick(ListView l, View v, int position, long id) {
        showDetails(position);
    }

    private void showDetails(int position) {
        mCurCheckPosition = position;
        Toast.makeText(getActivity(), listItems[position], Toast.LENGTH_SHORT).show();
    }

}

マイレイアウト:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <ListView
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/android:list"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >
    </ListView>

</LinearLayout>

my_row:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="?android:attr/listPreferredItemHeight"
    android:orientation="vertical"
    android:padding="6dp" >

    <ImageView
        android:id="@+id/iv_mehr_list_item_icon"
        android:layout_width="wrap_content"
        android:layout_height="fill_parent"
        android:layout_marginRight="6dp"
        android:src="@drawable/ic_launcher" />

    <TextView
        android:id="@+id/tv_mehr_list_item_title"
        android:layout_width="fill_parent"
        android:layout_height="0dp"
        android:gravity="center_vertical" />

</LinearLayout>
4

2 に答える 2