0

しばらくの間、このエラーを解決するためにグーグルと検索を行ってきましたが、その理由と解決方法を見つけることができないようです.

リストビューに入力するために customAdapter を使用しています。listItem を記述する xml を膨らませます。viewHolder オブジェクトを作成し、findViewById を使用してテキストビューに読み込みます。その後、そのテキストビューのテキストを設定したいのですが、findViewbyid は null 値を返します。そのため、自動的に nullpointerexception に解決されます。

アダプタ:

/** CLASS : Custom Adapter for the listview */
private class CustomAdapter extends ArrayAdapter<Track>{
    private List<Track> items;
    private Context mContext;
    private int layoutResourceId;       
    private ViewHolder mHolder;

    public CustomAdapter(Context context, int layoutId, List<Track> objects) {
        super(context, layoutId, objects);
        layoutResourceId=layoutId;
        items = objects;
        mContext=context;       
    }       

    public View getView(int position, View convertView, ViewGroup parent) {
         if(convertView == null){
             LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
             convertView = inflater.inflate(layoutResourceId, parent, false);
             mHolder = new ViewHolder();
             ****** RETURNS NULL DURING DEBUGGING ******
             mHolder.textViewCenter = (TextView)findViewById(R.id.textview_list_item_central);
             convertView.setTag(mHolder);
         }else{
             mHolder = (ViewHolder) convertView.getTag();
         }
         Track track = items.get(position);
         ****** ERROR HAPPENS HERE ******
         mHolder.textViewCenter.setText(track.getTrack());
         return convertView;
    }

    class ViewHolder{
        ImageView imageView;
        TextView textViewCenter;
        TextView textViewRight;
    }
}

XML:

?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >

<ImageView
    android:id="@+id/imageview_list_albumart_icon"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="left"
    android:src="@drawable/ic_music" />

<TextView
    android:id="@+id/textview_list_item_central"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:layout_weight="0.5"
    android:text="Center"
    android:textSize="20sp" >
</TextView>

<TextView
    android:id="@+id/textview_list_item_right"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="right"
    android:paddingRight="10dip"
    android:text="Right" />

どんな助けでも大歓迎です!

4

5 に答える 5

7

インフレートしたビューを検索しconvertViewます(現在のActivityように現在のレイアウトではありません):

 mHolder.textViewCenter = (TextView) 
                convertView.findViewById(R.id.textview_list_item_central);
于 2012-05-22T09:38:44.500 に答える
0

これを置き換えてみてください:

convertView = inflater.inflate(R.layout.listitemview, null);  

あなたがあなたとs定義した場所listitemviewはどこですか.. これがあなたに役立つことを願っていますxmlImageViewTextView

于 2012-05-22T09:53:15.040 に答える
0

行を変更する

mHolder.textViewCenter = (TextView)findViewById(R.id.textview_list_item_central);

以下は *デバッグ中にNULLを返す* による

mHolder.textViewCenter = (TextView) convertView.findViewById(R.id.textview_list_item_central);
于 2012-05-22T09:53:36.570 に答える
0

レイアウトを膨らませていますが、ビューを取得している間は使用していません

これを行う:

 mHolder.textViewCenter = (TextView)convertView.findViewById(R.id.textview_list_item_central)
于 2012-05-22T09:39:46.250 に答える
0

TextView の初期化が間違っています

if(convertView == null){
             LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
             convertView = inflater.inflate(layoutResourceId, parent, false);
             mHolder = new ViewHolder();
             ****** RETURNS NULL DURING DEBUGGING ******
             mHolder.textViewCenter = (TextView) convertView .findViewById(R.id.textview_list_item_central); //Change done
             convertView.setTag(mHolder);
         }else{
             mHolder = (ViewHolder) convertView.getTag();
         }
于 2012-05-22T09:43:01.803 に答える