2012-05-23 57 views
14

我有一個ListView的圖像右側。我想通過點擊ListView上的圖像來執行onClick聽衆活動。請參閱圖片以供參考。onClick監聽到ListView圖像 - Android

enter image description here

我知道基本OnClick監聽器實現,但是這似乎是一個有點棘手我:P

忘了提,通過單擊實際ListView將shootup一個新的活動,所以我需要維護這兩個模式。

listView.setOnItemClickListener(new OnItemClickListener() { 

     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, 
       long id) { 
      eventsData.remove(id); 
      cursor.requery(); 
     } 

    }); 

該代碼通過點擊任何列表元素eventsData.remove(id);上面執行刪除是用於執行此任務的一個數據庫幫手。就像我現在所說的,我需要一種方法來通過單擊圖像來執行相同的過程juts,而不是整個列表元素,我希望列表元素稍後可以執行一些其他操作。

我希望我現在清楚一點。


解決方案:

如果有人遇到相同的排序情況那麼這裏就是適配器的完整代碼。

class CustomAdapter extends ArrayAdapter<String> { 
CustomAdapter() { 
    super(Activity.this, R.layout.row, R.id.label, items); 
} 

public View getView(final int position, View convertView, 
        ViewGroup parent) { 
    View row=super.getView(position, convertView, parent); 
    deleteImg=(ImageView)row.findViewById(R.id.icon); 

    deleteImg.setImageResource(R.drawable.delete);  
    deleteImg.setOnClickListener(new OnClickListener() { 
     String s = items[position]; 
    @Override 
    public void onClick(View v) { 
     Toast.makeText(context, s, Toast.LENGTH_SHORT).show();   
    } 
}); 

    return(row); 
} 

}

我知道這個編碼是有點蹩腳如此忍受我,我只是想表明的實際過程就是這樣。

它的工作對我來說:)

回答

9

你應該做它,在你AdapterActivity

yourImg.setOnClickListener(new OnClickListener() { 

    @Override 
    public void onClick(View v) { 
     // things you want to do 
    } 
}); 
+0

如何確定目前的狀態列表元素?任何指針或標識符? –

+0

「當前狀態」是什麼意思? – candyleung

+0

嘿,看看最後的代碼......感謝你:) –

2

添加到最後的答案,reering這個答案,我添加了一些代碼刪除項目或其他動作之後刷新視圖:

//in your adapter you have to get list of items: 

public CartListAdapter(Context context, int resourceId, 
     List<CartItemModel> items) { 
    super(context, resourceId, items); 
    this.context = context; 
    this.items= items; 
} 

//after that you have to set a listner on the imageView like this: 

public View getView(int position, View convertView, ViewGroup parent) { 
    holder.imageViewDelete.setOnClickListener(new imageViewClickListener(position)); 
    // some other lines code ... 
    // here we get the item to remove 
    rowItem= getItem(position); 
    } 

//and here the definition of the listner: 

private class imageViewClickListene implements OnClickListener { 
    int position; 
    public imageViewClickListene(int pos) 
     { 
      this.position = pos; 
     } 

    public void onClick(View v) { 

    // here we remove the selected item  
     items.remove(rowItem); 
      // here we refresh the adapter 
     CartListAdapter.this.notifyDataSetChanged(); 

} 
} 

它的工作對我來說,享受!

3

創建一個接口,從接口到活動

public interface ListenerActivity   
{  
public void Remove();  
} 

通信在適配器類:

class CustomAdapter extends ArrayAdapter<String> { 

ListenerActivity listener; 

CustomAdapter(YourActivity obj) { 
    super(Activity.this, R.layout.row, R.id.label, items); 

    listener=obj; 
} 
public View getView(final int position, View convertView, 
       ViewGroup parent) { 
ImageId.setOnClickListener(new OnClickListener() { 

    @Override 
    public void onClick(View v) { 
     listener.Remove(); 
    } 
}); 
} 

您的活動:

class MyActivity extends Activity implements ListenerActivity 
{ 
@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
} 
@Override 
    public void Remove() { 

//Do your remove functionality here 
    }   
} 
+1

不錯的@Satheesh :) +1;) –