2013-01-20 81 views
0

我想添加第二個on click到ListViewItem。 我已經創建了視圖(ImageView),並設置了點擊。該函數被調用。 但是:我怎樣才能得到這個ListViewItem的信息?在ListView中獲取位置就足夠了?將第二個onclick添加到列表視圖

的ImageView的:

<ImageView 
    android:id="@+id/imageView1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_gravity="right|center_vertical" 
    android:layout_marginLeft="10dp" 
    android:layout_marginRight="10dp" 
    android:onClick="favorite" 
    android:src="@drawable/star" /> 

我上點擊功能代碼:

public void favorite(View view){ 
    ImageView iView = (ImageView) view; 
    iView.setImageResource(R.drawable.star_checked); 

    ViewParent v = iView.getParent(); 
} 

回答

0

使用匿名內部類:

ImageView iView = (ImageView) findViewById(R.id.imageView1); 
    iView.setOnClickListener(new OnClickListener(){ 
      public void onClick(View v) { 
       //Your code 
      } 
     }); 

myListView.setOnItemClickListener(new OnItemClickListener() {  ![enter image description here][2] 

       @Override 
       public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 

        String value = myListView.getAdapter().getItem(position).toString(); // String value of the clicked item 
        //Code 

        } 
        }); 

如果你想成爲更大的應用程序,您應該考慮更好地命名你的組件,'imageView1'不是很方便。爲您的組件命名爲'imageview_main'或'imageview_customerdetails'。

+0

我有onClickListener。但是現在我需要知道這個onClick是什麼ListViewItem。但我怎麼能得到ListViewItem的位置? – Styler2go

+0

剛剛閱讀這個帖子http://stackoverflow.com/questions/5934552/how-to-get-position-of-clicked-item-in-onclicklistener-of-listview,你現在可以使用整數的'位置' – ObAt

+0

我認爲你錯過了我的意思。我有ListView。每個項目都有一個onItemClick事件。但是在每個ListViewItem中都是一個ImageView。這ImageView shoudl有另一個不同的OnItemClick。但是:如何? – Styler2go

0

子類OnItemClickListener而不是OnClickListener。

編輯:

好吧我想我明白你現在要做的是什麼。我會繼承您的ListAdapter並重寫getView(int position, ...)方法,像這樣:

private OnClickListener mImgClickListener = new OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      int position = (Integer) view.getTag(); 
      // do stuff with position knowledge! 
     } 
    }); 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    if (convertView != null) { 
     v = convertView; 
    } else { 
     v = newView(int position); 
    } 
    v.findViewById(R.id.imageView1).setTag(position); 
    return v; 
} 

private View newView(int position) { 
    View v; 
    // inflate your view here 
    View imageView = v.findViewById(R.id.imageView1); 
    imageView.setOnClickListener(mImgClickListener); 
    return v; 
} 

當然,更好的辦法是執行在getView方法ViewHolder模式,以消除昂貴的呼叫findViewById

我相信View層次結構將優先考慮點擊ImageView(而不是整個列表項),但我可能是錯的。