当用户点击ListView的项目时,我会在此列表项目中显示“编辑”按钮。 lastSelectedPosition
具有最后点击的列表项的位置。
代码:
public class MainActivity extends Activity {
private ListView listView;
private MyAdapter adapter;
// static - If the activity is re-created, the data
// about list items remain.
private static List<String> items = loadItems();
private MyItemClickListener listener = new MyItemClickListener();
private int lastSelectedPosition = ListView.INVALID_POSITION;
@Override
protected void onCreate(Bundle savedInstanceState) {
listView = (ListView) findViewById(R.id.myListView);
adapter = new MyAdapter(R.layout.my_item, items);
listView.setAdapter(adapter);
listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
listView.setOnItemClickListener(listener);
if (savedInstanceState != null) {
// Is recreating the activity because
// of the change screen orientation.
lastSelectedPosition = savedInstanceState.getInt("lastSelectedPos");
if (lastSelectedPosition != ListView.INVALID_POSITION) {
// !!! getChildAt() always returns null !!!
View listItem = listView.getChildAt(lastSelectedPosition);
View editButton = listItem.findViewById(R.id.editButton);
// Only selected list item has visible EditButton,
// other list items have not
editButton.setVisibility(View.VISIBLE);
}
}
}
@Override
protected void onSaveInstanceState(Bundle outState) {
// Is destroying the activity because
// of the change screen orientation.
outState.putInt("lastSelectedPos", lastSelectedPosition);
}
// Other methods
}
我认为getChildAt()
始终会在null
中返回Activity.onCreate()
,因为此时列表尚未完全开发。如何让View
列表项显示“编辑”按钮?
抱歉我的英语。
由于
答案 0 :(得分:1)
您的适配器需要知道此选定位置,以便在getView()
中正确呈现。只需修改适配器的构造函数以获取int,并在调用onclick时更新该int值。通常,您应该始终拥有在适配器中重新创建列表项状态所需的所有信息。
答案 1 :(得分:0)
我认为这是因为当用户点击列表视图中的项目时,您没有更改lastSelectedPosition
的值。只需像以下代码段一样实施您的onItemClickListener
即可。并在此更改lastSelectedPosition
的值。并删除你的
private MyItemClickListener listener = new MyItemClickListener();
线。
在您定义lastSelectedPosition
变量之前,我认为listener
的值无法更改。而且我也不知道你在哪里定义listener
变量。
lv1.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
lastSelectedPosition = arg2
}
});
我希望这会对你有所帮助。