2011-09-01 22 views
0

我想實現具有一個可點擊圖像的列表視圖在每一行查看,爲此我創建了自定義適配器並覆蓋其所有方法。現在我的問題是, 當我點擊這個圖像視圖沒有點擊該行是不正常我的代碼如下圖像Viewnot在列表視圖中正常工作

保護無效onListItemClick(ListView的L,視圖V,最終詮釋位置,長的id){

super.onListItemClick(l, v, position, id); 

    RowData rowObject = (RowData) l.getItemAtPosition(position); 
    contactId= rowObject.getTextId(); 

//contactId gives the position of the row clicked in the list view. 

    Log.e("on item clicked", contactId.toString()); 

    ImageView nextView = rowObject.getImageobject(); 
    nextView.setClickable(true); 
    nextView.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
       // TODO Auto-generated method stub 
      Log.i("Value of row id", String.valueOf(position)); 
       Intent myintent = new Intent(v.getContext(),Info.class); 
       myintent.putExtra("ContactId", contactId); 
       v.getContext().startActivity(myintent); 

     } 
    }); 

這裏,如果我先點擊行然後圖像視圖然後它工作正常。但是,如果我點擊圖像視圖而不點擊該行(即,沒有選擇該行),那麼它需要最後一行點擊的位置。

請幫幫我。

回答

0

OK終於挖列表視圖這麼多我被自己的解決方案,並isthe自定義適配器的getView方法,現在每當我點擊圖片查看(INT位置)getview的參數給出了被點擊的行的位置。在這裏我是我後來實現的代碼。

private class CustomAdapter extends ArrayAdapter<RowData> { 
    public CustomAdapter(Context context,int resource,int textViewResourceId,List<RowData> objects) { 
     super(context, resource, textViewResourceId, objects); 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     ViewHolder holder = null; 
     TextView Name  = null; 
     TextView JobTitle = null; 
     ImageView Emailimage = null; 
     ImageView Phoneimage = null; 
     ImageView nextView = null; 
     RowData rowData = getItem(position); 

     if(null == convertView){ 
      mInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      convertView = mInflater.inflate(R.layout.contact_found_list_item_row, null); 
      holder = new ViewHolder(convertView); 
      convertView.setTag(holder); 
     } 

     String positionId = String.valueOf(position); 
     holder = (ViewHolder) convertView.getTag(); 
     Name = holder.gettitle(); 
     Name.setText(rowData.mTitle); 
     JobTitle = holder.getdetail(); 
     JobTitle.setText(rowData.mDetail);              
     Emailimage=holder.getImage(); 
     Emailimage.setImageResource(rowData.phoneId); 
     Phoneimage = holder.getphoneImage(); 
     Phoneimage.setImageResource(rowData.emailId); 
     nextView = holder.getNextViewObject(); 
     nextView.setTag(positionId); 
     nextView.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       ImageView iv = (ImageView)v; 
       String rowid = (String)iv.getTag(); 
       Intent myintent = new Intent(v.getContext(),Info.class); 
       myintent.putExtra("ContactId", rowid); 
       v.getContext().startActivity(myintent); 
      } 
     }); 

     return convertView; 
    } 

    private class ViewHolder { 
     private View mRow; 

     private TextView Name = null; 
     private TextView JobTitle = null; 
     private ImageView Emaillogo = null; 
     private ImageView phonelogo = null; 
     private ImageView nextViewlogo = null; 

     public ViewHolder(View row) { 
      mRow = row; 
     } 

     public TextView gettitle() { 
      if(null == Name){ 
       Name = (TextView) mRow.findViewById(R.id.txtfirstname); 
      } 
      return Name; 
     }  

     public TextView getdetail() { 
      if(null == JobTitle){ 
       JobTitle = (TextView) mRow.findViewById(R.id.txtjobtitle); 
      } 
      return JobTitle; 
     } 

     public ImageView getImage() { 
      if(null == Emaillogo){ 
       Emaillogo = (ImageView) mRow.findViewById(R.id.emaillogo); 
      } 
      return Emaillogo; 
     } 
     public ImageView getphoneImage(){ 
      if(null == phonelogo){ 
       phonelogo = (ImageView) mRow.findViewById(R.id.mobilelogo); 
      }return phonelogo; 
     } 
     public ImageView getNextViewObject(){ 
      if(null == nextViewlogo){ 
       nextViewlogo = (ImageView)mRow.findViewById(R.id.nextbutton); 
      }return nextViewlogo; 
     } 

    } 
1

請參閱我的getView函數。因爲我有一個對象出現在每個列表上。 。 。當我點擊通話按鈕時,我可以獲得點擊。

public View getView(final int position, View convertView, ViewGroup parent) 
     { 

      View v = convertView; 
      if (v == null) 
      { 
       try 
       { 
       LayoutInflater vi = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
       v = vi.inflate(R.layout.pantry_list_row, null); 



        } 
       catch(Exception e) 
       { 
        System.out.println("Excption Caught"+e); 
       } 
      } 
      PantreisInfo p = items.get(position); 


      if (p != null) 
      { 
       TextView name = (TextView) v.findViewById(R.id.pantryName); 
       TextView add1= (TextView) v.findViewById(R.id.pantryAddress1); 
       TextView add2=(TextView)v.findViewById(R.id.pantryAddress2); 
       TextView phno = (TextView) v.findViewById(R.id.pantryPhno); 
       TextView distTime = (TextView) v.findViewById(R.id.distTime); 

//

   if (name != null) 
       { 
        name.setText(p.getName().get(0).toString()); 
       } 
       if (add1 != null) 
       { 
        add1.setText(p.getAddress1().get(0).toString()); 
       } 
       if (add2 != null) 
       { 
        add2.setText(p.getAddress2().get(0).toString()); 
       } 
       if (phno != null) 
       { 
        phno.setText(p.getPhone().get(0).toString()); 

       } 
       if (distTime!= null) 
       { 
        distTime.setText("Distribution Time: "+p.getDistTime().get(0).toString()); 
       } 
      } 
       ImageView phbtn=(ImageView)v.findViewById(R.id.phbtn); 
       phbtn.setOnClickListener(new View.OnClickListener() 
       { 

        @Override 
        public void onClick(View arg0) 
        { 

         final AlertDialog.Builder dialog=new AlertDialog.Builder(PantriesListActivity.this); 
         PantreisInfo p=items.get(position); 

         String tempPhone=p.getPhone().get(0).toString(); 
         String phoneNumber=""; 
         for(int i=0;i<tempPhone.length();i++) 
         { 
          if (Character.isDigit(tempPhone.charAt(i))) 
          { 
           System.out.println(tempPhone.charAt(i)); 
           phoneNumber=phoneNumber+tempPhone.charAt(i); 
          } 

         } 

         dialog.setMessage("Press ok to Dial "+phoneNumber+",otherwise click on cancel to discard."); 
         final String number="tel:" +phoneNumber.trim(); 

         dialog.setPositiveButton("Ok",new DialogInterface.OnClickListener() 
         { 

          @Override 
          public void onClick(DialogInterface arg0, int arg1) 
          { 
           // TODO Auto-generated method stub 

            Intent callIntent = new Intent(Intent.ACTION_CALL,Uri.parse(number)); 
            startActivity(callIntent); 

           dialog.setCancelable(true); 
          } 
         }); 
         dialog.setNegativeButton("Cancel",new DialogInterface.OnClickListener() { 

          @Override 
          public void onClick(DialogInterface dfdialog, int which) 
          { 
           // TODO Auto-generated method stub 
           dialog.setCancelable(true); 
          } 
         }); 

         dialog.show(); 
         //Toast.makeText(PantriesListActivity.this,""+p.getPhone().get(0), Toast.LENGTH_SHORT).show(); 



        } 
       }); 


       return v; 
     } 
+0

嗨,探險家thanx爲年幫助。但我真正想要的是,當我點擊任意行整行圖像視圖時應該點擊(這樣我就能夠獲得該行的位置,並且該位置被傳遞給下一個活動),你能告訴我任何方式要這樣做 –

+1

您應該不得不關閉ImageView的屬性。只需將ImageView的屬性設置爲android:clickable =「false」 –