简体   繁体   English

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

[英]How to create a custom ListView In Android?

Here is my MainActivity.java which contains a Listview . 这是我的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);
    }
}

Here is my CustAdapter Adapter Class It's working, but when I scroll up to the last item, it shows a Null Pointer Error. 这是我的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;
    }

}

getView() of BaseAdapter should looks like this: 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;
  }

ViewHolder class in BaseAdapter . BaseAdapter ViewHolder类。

private class ViewHolder {
     private TextView txtTitle, txtDateTime;
}

Hope it will help you. 希望对您有帮助。

您的maintext []和text []元素不匹配,maintext对象有15个值,而text对象有20个值,则从text对象中删除5个值并尝试。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM