Так что это немного сложная ситуация, поэтому я постараюсь объяснить, что происходит, как могу.У меня есть БД sqlite, который заполняет список.Каждый элемент в списке содержит имя элемента и две кнопки.Я хочу, чтобы эти две кнопки могли использовать идентификатор строки sqlite db элемента, который они содержат, для выполнения своей цели.Поэтому мне нужно получить идентификатор элемента, но я не думаю, что использование onListItemClick(ListView l, View v, int position, long id)
будет работать для меня, потому что я не нажимаю на весь элемент, а скорее на кнопки внутри него.Если я неправильно понимаю этот момент, пожалуйста, дайте мне знать.Для того, чтобы кнопки нажимались, я создал класс, который расширяет SimpleCursorAdapter, который правильно обрабатывает щелчки.Вот два рассматриваемых класса.Во-первых, listactivity, а во-вторых, пользовательский listadapter.
import android.app.ListActivity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.database.Cursor;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.SimpleCursorAdapter;
public class FriendRequestList extends ListActivity implements OnClickListener {
private Button m_closeButton;
private TagDBAdapter mDbAdapter;
private Cursor mCursor;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mDbAdapter = new TagDBAdapter(this);
mDbAdapter.open();
this.initLayout();
fillData();
}
private void initLayout() {
setContentView(R.layout.request_list);
m_closeButton = (Button)findViewById(R.id.request_window_close_button);
m_closeButton.setOnClickListener(this);
}
private void fillData() {
SharedPreferences prefs = this.getSharedPreferences("Prefs", MODE_WORLD_READABLE);
String username = prefs.getString("keyUsername", "");
RestClient.getRequests(username, this);
mCursor = mDbAdapter.fetchAllRequests();
startManagingCursor(mCursor);
String[] from = new String[] {TagDBAdapter.KEY_NAME};
int[] to = new int[] {R.id.requester};
SimpleCursorAdapter requests = new FriendRequestListAdapter(this, R.layout.request_view, mCursor, from, to);
this.setListAdapter(requests);
}
public String getRequester() {
return null;
}
@Override
public void onClick(View v) {
SharedPreferences prefs = this.getSharedPreferences("Prefs", MODE_WORLD_READABLE);
String username = prefs.getString("keyUsername", "");
RestClient.getUpdates(username, this);
Intent intent = new Intent(this, MainMenu.class);
this.startActivity(intent);
}
@Override
public void onDestroy() {
super.onDestroy();
mDbAdapter.close();
}
}
И класс адаптера:
import android.app.Activity;
import android.content.Context;
import android.content.SharedPreferences;
import android.database.Cursor;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.SimpleCursorAdapter;
public class FriendRequestListAdapter extends SimpleCursorAdapter implements OnClickListener {
private Context mContext;
public FriendRequestListAdapter(Context context, int layout, Cursor c,
String[] from, int[] to) {
super(context, layout, c, from, to);
mContext = context;
}
public View getView(int position, View convertView, ViewGroup parent) {
View view = super.getView(position, convertView, parent);
Button confirm = (Button)view.findViewById(R.id.confirm_request);
confirm.setOnClickListener(this);
Button deny = (Button)view.findViewById(R.id.deny_request);
deny.setOnClickListener(this);
return view;
}
@Override
public void onClick(View v) {
SharedPreferences prefs = mContext.getSharedPreferences("Prefs", Activity.MODE_WORLD_READABLE);
String username = prefs.getString("keyUsername", "");
//want to get the id here so i can do stuff with the buttons
switch(v.getId()) {
case R.id.confirm_request :
String confirmState = "2";
//these buttons both work
break;
case R.id.deny_request :
String denyState = "3";
//these buttons both work
Log.e("TESTING", "deny");
break;
}
}
}
Надеюсь, я прояснил свой вопрос достаточно ясно.Подводя итог, я не знаю, как я мог бы получить rowId элемента, в который вложена пара кнопок, потому что я никогда не использую метод onListItemClick, который, насколько я знаю, является одним из способовобычно получает идентификатор элемента.Спасибо за чтение и спасибо за ваши ответы.Пожалуйста, дайте мне знать, если есть какие-либо разъяснения, которые я могу сделать.