簡體   English   中英

自定義ListView適配器中的NullPointer異常

[英]NullPointer Exception in custom ListView Adapter

我在自定義ListView Adapter android應用程序中收到NullPointer異常。 這是我的自定義類,其中包含一些變量和getter。

public class ViewClass {
    String ItemName, Category, Amount, TotalAmount;
    //get,set methods here
}

這是我的主要活動課。

public class ViewList extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        final ArrayList<ViewClass> details = new ArrayList<ViewClass>();

        ViewClass[] v = new ViewClass[5];
        for (int i = 0; i < 5; i++) {
            v[i] = new ViewClass();
            v[i].setItemName("Item Name");
            v[i].setAmount("Rs 1111");

            v[i].setCategory("cateGory");
            v[i].setTotalAmount("aaaa");
            details.add(v[i]);
        }
        ListView msgList = (ListView) findViewById(R.id.MessageList);
        msgList.setAdapter(new CustomListAdapter(details, this));
        // msgList.setOnItemClickListener(new OnItemClickListener() {
        // public void onItemClick(AdapterView<?> a, View v, int position,
        // long id) {
        //
        // String s = (String) ((TextView) v.findViewById(R.id.From))
        // .getText();
        // Toast.makeText(ViewList.this, s, Toast.LENGTH_SHORT).show();
        // }
        // });

    }
}

這是ListItem Layout的XML文件,名稱為list_item_trans

   <LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal" >

    <TextView
        android:id="@+id/tvBGColor1"
        android:layout_width="10dp"
        android:layout_height="fill_parent"
        android:background="@android:color/background_dark" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/space" />

    <TextView
        android:id="@+id/tvItem"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"

        android:textSize="20sp"
        android:textStyle="bold" />

    <TextView
        android:id="@+id/tvAmount"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="right"

        android:textSize="20sp"
        android:textStyle="bold" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/space" />
</LinearLayout>

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal" >

    <TextView
        android:id="@+id/tvBGColor2"
        android:layout_width="10dp"
        android:layout_height="fill_parent"
        android:background="@android:color/background_dark" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/space" />

    <TextView
        android:id="@+id/tvCat"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"

        android:textSize="12sp" />

    <TextView
        android:id="@+id/tvTotalAmount"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="right"

        android:textSize="12sp" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/space" />
</LinearLayout>

顧名思義,這就是CustomListAdapter

public class CustomListAdapter extends BaseAdapter{
    private ArrayList<ViewClass> _data;
    Context _c;

    CustomListAdapter(ArrayList<ViewClass> data, Context c) {
        _data = data;
        _c = c;
    }

    public int getCount() {
        // TODO Auto-generated method stub
        return _data.size();
    }

    public Object getItem(int position) {
        // TODO Auto-generated method stub
        return _data.get(position);
    }

    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return position;
    }

    public View getView(final int position, View convertView, ViewGroup parent) {
        // TODO Auto-generated method stub
        View v = convertView;
        if (v == null) {
            LayoutInflater vi = (LayoutInflater) _c
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            v = vi.inflate(R.layout.list_item_message, null);
        }

        TextView tvItemName = (TextView) v.findViewById(R.id.tvItem);
        TextView tvCategory = (TextView) v.findViewById(R.id.tvCat);
        TextView tvAmount = (TextView) v.findViewById(R.id.tvAmount);
        TextView tvTotalAmount = (TextView) v.findViewById(R.id.tvTotalAmount);

        ViewClass msg = _data.get(position);
        tvItemName.setText(msg.ItemName);
        tvCategory.setText("Subject: " + msg.Category);
        tvAmount.setText(msg.Amount);
        tvTotalAmount.setText(msg.TotalAmount);

        return v;
    }
}

我在CustomListAdapter的getView方法中遇到錯誤

tvItemName.setText(msg.ItemName);

這是ListItem Layout的XML文件,名稱為list_item_trans

因此,XML布局名稱為list_item_trans.xml

v = vi.inflate(R.layout.list_item_message, null);

您正在誇大list_item_message.xml,但您的布局名稱是list_item_trans.xml

Maybee錯誤在這里?

列表項的布局為list_item_trans ,但您要誇大list_item_message

更改此行:

v = vi.inflate(R.layout.list_item_message, null);

變成這個:

v = vi.inflate(R.layout.list_item_trans, null);

導致自定義ListView適配器中的NullPointer異常

因為您要膨脹list_item_message.xml而不是list_item_trans.xml並從list_item_trans.xml初始化文本 視圖

所以只要改變

 v = vi.inflate(R.layout.list_item_message, null);

對此

v = vi.inflate(R.layout.list_item_trans, null);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM