你必須執行自定義適配器並手動設置getView()
方法中這些視圖的偵聽器(Button
和TextView
)。要找到Button
或TextView
被點擊的行,您可以首先將位置(您在getView()
方法中獲得的參數)設置爲標籤,然後在偵聽器中根據視圖的標籤找出正在處理的行。方法onItemClick
只會告訴你在列表中點擊了行。
這裏是與自定義適配器一些示例代碼:
class CustomCursorAdapter extends CursorAdapter {
private LayoutInflater mInflater;
private Context ctx;
public CustomCursorAdapter(Context context, Cursor c,
boolean autoRequery) {
super(context, c, autoRequery);
mInflater = LayoutInflater.from(context);
ctx = context;
}
@Override
public void bindView(View view, final Context context, Cursor cursor) {
ViewHolder holder = (ViewHolder) view.getTag();
String txt = cursor.getString(cursor.getColumnIndex("name"));
holder.text.setText(txt);
holder.button.setText(txt);
int currentPosition = cursor.getPosition();
holder.text.setTag(new Integer(currentPosition));
holder.button.setTag(new Integer(currentPosition));
OnClickListener listener = new OnClickListener() {
@Override
public void onClick(View v) {
int thePosition = (Integer) v.getTag();
if (v.getId() == R.id.button1) {
Toast.makeText(ctx,
"You clicked the Button from the row "
+ thePosition + "!", Toast.LENGTH_SHORT).show();
} else if (v.getId() == R.id.textView1) {
Toast.makeText(ctx,
"You clicked the TextView from the row "
+ thePosition + "!", Toast.LENGTH_SHORT).show();
}
}
};
holder.text.setOnClickListener(listener);
holder.button.setOnClickListener(listener);
}
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
View v = mInflater.inflate(R.layout.adapters_cursor_adapter_clicks,
null);
ViewHolder holder = new ViewHolder();
holder.text = (TextView) v.findViewById(R.id.textView1);
holder.button = (Button) v.findViewById(R.id.button1);
v.setTag(holder);
return v;
}
class ViewHolder {
TextView text;
Button button;
}
}
我用一個單一的OnClickListener
兩個意見,你可以使用2個監聽一個爲每個視圖followinf同樣的原則。滿級+佈局文件可以在這裏找到:http://pastebin.com/uM0mb4mq(與要點可在這裏:的git://gist.github.com/2625797.git)
感謝您的回答。我不能正確地實現它,但getView()的position屬性實際上是最後一個可見元素的編號,無論我在哪裏。我應該把onItemClick放在什麼元素上?我的意思是我的listView是在活動類中聲明的,所以我的監聽器在cursorAdapter類中,所以... – 2012-03-26 06:27:11
@SebastienFERRAND你不太明白我的答案,我已經發布了一些示例代碼,它帶有一個自定義的'CursorAdapter'你在問什麼。 – Luksprog 2012-03-26 09:40:35
當(當然)我得到標籤點擊項目時,完美的作品。謝謝。 – 2012-03-26 10:11:01