如何在Android中创建自定义ListView?

时间:2015-07-11 05:43:31

标签: android listview scroll

以下是我的MainActivity.java,其中包含Listview

public class MainActivity extends Activity {

    String maintext[] = { "item 1", "item 2", "item 3", "item 4", "item 5",
            "item 1", "item 2", "item 3", "item 4", "item 5", "item 1",
            "item 2", "item 3", "item 4", "item 5" };
    String text[] = { "342", "3542", "3523", "23654", "3545", "342", "3542",
            "3523", "23654", "3545", "342", "3542", "3523", "23654", "3545",
            "342", "3542", "3523", "23654", "3545" };
    ListView list;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        list = (ListView) findViewById(R.id.listView1);

        CustAdapter adp = new CustAdapter(MainActivity.this, maintext, text);
        list.setAdapter(adp);
    }
}

这是我的CustAdapter适配器类 它正常工作,但当我向上滚动到最后一项时,它显示出空指针错误。

public class CustAdapter extends BaseAdapter {
    Context context;
    String maintext[];
    String text[];

    public CustAdapter(Context context, String maintext[], String text[]) {
        // TODO Auto-generated constructor stub

        this.context = context;
        this.maintext = maintext;
        this.text = text;
    }

    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return maintext.length;
    }

    @Override
    public Object getItem(int arg0) {
        // TODO Auto-generated method stub
        return maintext[arg0];
    }

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


    ImageView imgv;
    TextView mainText1;
    TextView text1;

    @Override
    public View getView(int arg0, View arg1, ViewGroup arg2) {
        // TODO Auto-generated method stub
        if (arg1 == null) {
            LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

            arg1 = inflater.inflate(R.layout.listview, null);

            imgv=(ImageView) arg1.findViewById(R.id.imageView1);

            mainText1=(TextView) arg1.findViewById(R.id.textView1);

            text1=(TextView) arg1.findViewById(R.id.textView2);

            imgv.setBackgroundResource(R.drawable.ic_launcher);

            mainText1.setText(maintext[arg0]);

            text1.setText(text[arg0]);

        } else {
            arg1 = (View)arg1.getTag();
        }

        return arg1;
    }

}

2 个答案:

答案 0 :(得分:1)

BaseAdapter的

getView()应如下所示:

 @Override
 public View getView(final int position, View convertView, ViewGroup parent) {
     if (convertView == null) {
            holder = new ViewHolder();
            convertView = mLayoutInflater.inflate(R.layout.row_push_notification, null);
                // bind views
                holder.txtTitle = (TextView) convertView.findViewById(R.id.txtTitle);
                holder.txtDateTime = (TextView) convertView.findViewById(R.id.txtDateTime);

                // set tag
                convertView.setTag(holder);
            } else {
                // get tag
                holder = (ViewHolder) convertView.getTag();
            }

            holder.txtTitle.setText(your_one_array[position]);
            holder.txtDateTime.setText(your_two_array[position]);

       return convertView;
  }
BaseAdapter 中的

ViewHolder 类。

private class ViewHolder {
     private TextView txtTitle, txtDateTime;
}

希望它会对你有所帮助。

答案 1 :(得分:0)

你的maintext []和text []元素不匹配,maintext对象有15个值,其中text对象有20个值从text对象中删除5个值并尝试..