2011-09-23 81 views
1

我試圖實現從適配器列表中打開具有相關信息的自定義對話框。在這裏我使用onclicklistener,它工作正常我得到自定義對話框,我的問題是我沒有得到正確的信息。如果我點擊對話框中列表中的任何項目,它將顯示最後一個項目的詳細信息。Onitemclick getview方法的監聽器

在生成列表時它顯示了logcat中的位置。但是當我試圖點擊細節textview它正在採取最後一個項目的位置。

public View getView(int position, View convertView, ViewGroup parent) { 
      // TODO Auto-generated method stub 
      View v = convertView; 

      if(v == null){ 
       LayoutInflater vl = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
       v = vl.inflate(R.layout.listItem, null); 
      } 
      Fields o = results.get(position); 

      if (o != null) { 
       TextView iv = (TextView)v.findViewById(R.id.toptext); 
       TextView tv_link = (TextView)v.findViewById(R.id.toptext1);    
       ImageView tv_Image = (ImageView)v.findViewById(R.id.Locimage); 

       tv_link.setText("Details >>"); 
       tv_link.setOnClickListener(new OnClickListener() { 
        @Override 
        public void onClick(View v) { 
         // TODO Auto-generated method stub 
         Dialog dialog = new Dialog(mContext); 

         dialog.setContentView(R.layout.locationdetails); 
         dialog.setTitle("Title"); 

         System.out.println("Position "+pos); 

         TextView LocName = (TextView) dialog.findViewById(R.id.LocDescName); 
         LocName.setText(o.getLocationName()); 

ImageView LocDescImage = (ImageView) dialog.findViewById(R.id.LocDescImage); 
         Bitmap bitmap; 
         try { 
          bitmap = BitmapFactory.decodeStream((InputStream) new URL(o.getLocationImage()).getContent()); 
          LocDescImage .setImageBitmap(bitmap); 
         } catch (IOException e) { 
          // TODO Auto-generated catch block 
          e.printStackTrace(); 
         } 

         dialog.show(); 
         } 
       }); 

       } 
      DbLoc.close();  
      return v; 
     }  
    } 

回答

1

嘗試使用setTag(對象o)和getTag()方法上的TextView,它可以幫助你 我的意思是

tv_link.setTag(o); 

的onClickListener內,獲得使用v.getTag該對象( );

Fields o=(Fields)v.getTag(); 
LocName.setText(o.getLocationName()); 

它可以解決你的問題。

+0

非常感謝Sunriser,它解決了我的問題。我現在得到正確的結果。 – atluriajith

0

這是因爲tv_link.setOnClickListener中的int:pos未正確管理。 爲什麼你沒有在這裏添加相關的代碼。

無論如何,如果通過tv_link.setTag(your_pbject)傳遞單個對象將足夠根據您的需求,通過它,否則創建內部類,它將實現View.onClickListener並在設置時通過構造函數傳遞相關數據這個onclickListenet爲每個視圖。

+0

感謝您的信息shailendra,反正我得到了解決方案。 – atluriajith