我是Android新手。我有一个SQLite后端,每行都是唯一的(想想一个人)。然后,我将这些数据显示在每个人的ListView中。当单击ListView项目时,它将转到子视图,该子视图具有特定父级ListView项目的所有信息。我遇到的问题是当我为ListView设置OnItemClickListener时,int位置和long id从0开始。当我通过列表视图中的第一个项目的意图传递这些对象时,我得到一个“android”。 database.CursorIndexOutOfBoundsException:索引0请求,大小为0“。这是因为我在SQlite中的行ID从1开始,而int位置或长ID从0开始。解决此问题的最佳方法是什么?我读过你可以将1添加到postion或id,但是如果用户以不同的方式对他们的ListView进行排序,它会不会将错误的ID传递给数据库?谢谢ListView中的OnClickListener _id与SQLite中的正确行_id不匹配
MainActivity
final ArrayList<Person> objects = db.getAllPersons();
final CustomAdapter customAdapter = new CustomAdapter(this, objects);
customAdapter.notifyDataSetChanged();
final ListView listView = (ListView) findViewById(R.id.content_list);
listView.setAdapter(customAdapter);
//Listen for ListView item click
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
Intent intent = new Intent(MainActivity.this, PersonProfile.class);
intent.putExtra("id", id;
startActivity(intent);
}
});
PersonActivity
public class PersonProfile extends AppCompatActivity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.person_profile);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
//Get unique ID from MainActivity
int personID = getIntent().getExtras().getInt("id");
//Fetch individual from the database based on unique ID
DatabaseHandler db = new DatabaseHandler(this);
db.getReadableDatabase();
Person person = db.getPerson(personID);
db.close();
//Set TextView budget using unique ID
String budget = String.valueOf(person.getBudget());
TextView textViewBudget = (TextView) findViewById(R.id.person_budget);
textViewBudget.setText(budget);
}
而不是'CustomAdapter'使用'SimpleCursorAdapter',你的问题就会消失,这就是'[Simple] CursorAdapter'的用途:它从'Cursor'中读取_id列并提供正确的'id' 'onItemClick'方法 – pskink
谢谢,这工作! –
sure,no problema – pskink