我有一个Activity(MainWordsActivity),它有一个ListView填充来自数据库的数据,当点击其中一个项目时,我将该行的数据库及其在ListView上的位置传递给另一个活动(DetailActivity)。我在DetailActivity中也有一个下一个按钮,每次单击它时,我希望ListView中的下一个项目显示在相同的活动和视图上。我想要的是在单击nextButton后显示Listview上的下一个项目。 如何访问下一个项目,或者是否可以通过使用Cursor实现此目的。 谢谢
MainWordsActivity
private ArrayList<Word> testing;
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);
ArrayList<Word> result = new ArrayList<Word>();
Word word = testing.get(position);
Intent intent = new Intent(this, DetailActivity.class);
Bundle extras = new Bundle();
extras.putInt("pos", position);
extras.putParcelable(".model.Word", word);
intent.putExtras(extras);
startActivity(intent);
}
DetailActivity
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.word_detail);
Intent intent = getIntent();
Bundle extras = intent.getExtras();
pos = extras.getInt("pos");
word = extras.getParcelable(".model.Word");
refreshDisplay();
enter code here
Button butNext = (Button) findViewById(R.id.nextBut);
butNext.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
pos ++;
???
}
});
}
答案 0 :(得分:0)
我认为实现此目标的最佳方法是将Word
对象数组和pos
传递给DetailActivity
。
由于Word
是Parcelable
个对象,您可以使用putParcelableArrayList()
将整个testing
ArrayList
放入Bundle
。试试这个:
<强> MainWordsActivity 强>:
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);
Intent intent = new Intent(this, DetailActivity.class);
Bundle extras = new Bundle();
extras.putInt("pos", position);
extras.putParcelableArrayList(".model.Word", testing);
intent.putExtras(extras);
startActivity(intent);
}
在 DetailActivity :
中@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.word_detail);
Intent intent = getIntent();
Bundle extras = intent.getExtras();
pos = extras.getInt("pos");
ArrayList<Word> words = extras.getParcelableArrayList(".model.Word");
word = words.get(pos);
refreshDisplay();
Button butNext = (Button) findViewById(R.id.nextBut);
butNext.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
pos++;
word = words.get(pos); // get the next word from the list
refreshDisplay(); // I am assuming this updates the UI
/* ANY OTHER UI CHANGES CAN GO HERE */
}
});
}
这应该达到你想要的。我假设refreshDisplay()
将更新UI,但如果不是,那么您将根据新的word
更新UI。您还应该检查以确保不会超出ArrayList
等
此外,我删除了这一行:
ArrayList<Word> result = new ArrayList<Word>();
来自MainWordsActivity
,因为您似乎根本没有使用它。