Вам потребуется реализовать собственный адаптер и вручную настроить слушателей для этих представлений (Button
и TextView
) в методе getView()
.Чтобы найти строку, в которой щелкнули 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 слушателя, по одному для каждого представления, следуя тому же принципу.Полный файл макета класса + можно найти здесь: http://pastebin.com/uM0mb4mq (с gist , доступным здесь: git: //gist.github.com/2625797.git)