2012-08-30 57 views
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; 


        } 
     } 
} 
+1

请发表您的NullPointerException异常的堆栈跟踪。这将有助于! (并且不要忘记告诉堆栈指出的代码行是什么) –

+0

java.lang.NullPointerException com.example.xonlist.Xu $ myadatper $ 1.onClick(Xu.java:113)显示行TextView中的空指针异常t =(TextView)view.findViewById(R.id.TextView01); – San

+0

我想他们是一个位置问题,因为它一次不会更新列表视图的所有行。 – San

回答

1

当您想要从ListView中提取数据时,您不能使用行的视图。这是因为在构建(和显示)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(); 
+0

谢谢,我有一个问题,因为列表视图中的图像在滚动上发生变化,我在列表的末尾插入了一个空白图像,但上下滚动图像会改变其位置。 – San

+0

这是因为,正如我告诉过你的,Views被重用来显示列表的每一行。你必须在每种情况下设置你的图像,而不仅仅是最后一行('if(position == Datacount-1){...} else {/ * HERE * /}') –