0

我想获取列表视图内容的所有记录。我使用了 row.setonclicklistner 但前 3-4 项工作正常,下一项显示空指针异常。我该怎么办?我已经使用 (*) 指出了该特定行。

package com.example.tex.list;
public class tex extends Activity {

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

    setContentView(R.layout.activity_xutex);
    ListView lt=(ListView)findViewById(R.id.listView1);

    Databasequery db =  new Databasequery(this);
    db.open();
    List<Propertiess>test= db.getAllcards();
    lt.setAdapter(new myadatper(getApplicationContext(),R.layout.listlayoutdesign, test));


}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.activity_xutex, menu);
    return true;
}

 public class myadatper extends ArrayAdapter<Propertiess>
{
List<Propertiess> items;

LayoutInflater mInflater ; 

Context context;

int layoutResourceId; 
Propertiess p;

public myadatper(Context context, int layoutResourceId,
          List<Propertiess>items)
        {
       super(context, layoutResourceId, items);

        this.layoutResourceId=layoutResourceId;

        this.items = items;

        this.context=context;
         // TODO Auto-generated constructor stub
        }


        @Override
        public View getView(final int position, View convertView, ViewGroup parent)
        {
         // TODO Auto-generated method stub
         //return super.getView(position, convertView, parent);

         View row = convertView;
         ViewHolder holder = new ViewHolder();

         if(row==null)
         {


          LayoutInflater inflater=getLayoutInflater();
          row=inflater.inflate(R.layout.listlayoutdesign, parent, false);        
          holder.name = (TextView) row.findViewById(R.id.TextView01);
          holder.address = (TextView) row.findViewById(R.id.TextView02);
          holder.designation=(TextView)row.findViewById(R.id.TextView03);
          holder.contactno=(TextView)row.findViewById(R.id.textView1);
          holder.Emailaddress=(TextView)row.findViewById(R.id.TextView04);
          holder.TapToadd=(ImageView)row.findViewById(R.id.imageView1);

          row.setTag(holder);

    row.setOnClickListener(new View.OnClickListener() {

            public void onClick(View v) {       
                // TODO Auto-generated method stub

                ListView l3t=(ListView)findViewById(R.id.listView1);
                View view = l3t.getChildAt(position);
        Exception Point      ******************TextView t = (TextView)view.findViewById(R.id.TextView01);******************
                  TextView t2 = (TextView)view.findViewById(R.id.TextView02);
                 TextView t3=(TextView)view.findViewById(R.id.TextView03);
                 String data=t.getText().toString();
                Toast.makeText(getApplicationContext(), data, Toast.LENGTH_SHORT).show();

            }
        });



         }


         else
         {

                holder=(ViewHolder)row.getTag();


         }

                String name=items.get(position).getCompanyname();
                String contactno=items.get(position).getCompanycontactno();
                String address=items.get(position).getCompanyaddress();
                String designation=items.get(position).getCompanyempdesignation();
                String Emailaddress=items.get(position).getCompanyemailaddress();
                holder.name.setText(name);
                holder.contactno.setText(contactno);
                holder.designation.setText(designation);
                holder.address.setText(address);
                holder.Emailaddress.setText(Emailaddress);

                int Datacount=items.size();
                if(position==Datacount-1)
                {
                Toast.makeText(getApplicationContext(), Datacount+"", Toast.LENGTH_SHORT).show();
                holder.TapToadd.setBackgroundResource(R.drawable.taptoadd);
                }

                Toast.makeText(getApplicationContext(), position+"", Toast.LENGTH_SHORT).show();
                return row;

}

                  public class ViewHolder
                  {

                      TextView name;
                      TextView address;
                      TextView designation;
                      TextView contactno;
                      TextView Emailaddress;
                      ImageView TapToadd;
                      Object obj;


                  }
      }
 }
4

1 回答 1

1

当你想从你的 ListView 中提取数据时,你不能使用一行的 Views。这是因为视图在构建(和显示)ListView 的行时被回收。

你在一个适配器类中,它应该处理 ListView 后面的数据,所以使用它!

你应该更换你的

ListView l3t=(ListView)findViewById(R.id.listView1);
View view = l3t.getChildAt(position);
TextView t = (TextView)view.findViewById(R.id.TextView01);
TextView t2 = (TextView)view.findViewById(R.id.TextView02);
TextView t3=(TextView)view.findViewById(R.id.TextView03);
String data=t.getText().toString();

通过一个非常简单的方法:

String data = items.get(position).getCompanyname();
于 2012-08-30T07:17:20.397 回答