2012-08-30 49 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 * /}') –