gpt4 book ai didi

Android:ListView,同时在旋转/配置更改后记住并忘记其getCheckedItemPosition

转载 作者:行者123 更新时间:2023-11-29 01:56:26 31 4
gpt4 key购买 nike

我真的无法弥补,所以如果有任何提示,我将不胜感激。我必须在这里犯一些错误(4.1.2)。

我有一个 Activity,它在 onCreate() 中为 ListView 项目设置了一个子类 ArrayAdapter它呈现为 Checkable ViewGroup

Activity 已经利用 NonConfiguration 机制在方向改变时重新构建适配器。但是,它目前没有存储 ListViewgetCheckedItemPosition(),因为我觉得它没有必要(详情如下)。

有趣的是,我观察到的是以下内容。

  • Activity 已呈现。
  • 用户检查 ListView 项。
  • ListView 项目显示为选中状态。
  • onItemClickListenerListView 调用 getCheckedItemPosition() 并获得正确的结果。
  • 用户更改屏幕方向。
  • onCreate() 重新构建“ListView”并像以前一样显示(在 onCreate() 之后;见下文)。
  • onCreate() 调用 getCheckedItemPosition() 并获取 -1,尽管 ListView 显示正确检查的项目

经过进一步检查,出现了以下细节。

  • onCreate():
    • 获取ListView资源
    • 构建MyAdapter
    • MyAdapter设置为ListView的适配器
    • getCheckedItemPosition() 返回 -1
  • onCreate() 之后:
    • MyAdapter.getView() 正在被调用
    • CheckableViewGroup.setChecked() 使用正确的 checked 值调用
    • 将对所有项目重复最后两个步骤

如前所述,我依赖于 View 对象在分配了 ID 后保存其状态的 Android 功能。我会说是这种情况,因为必须有一些对象可以为所有列表条目设置正确的 checked 状态。 (顺便说一下,CheckableViewGroup 也覆盖了 on{Save,Restore}InstanceState() 但无论是否分配了 ID 都不会调用它(大概是因为它永远不会附加到布局根?)。

所以它看起来好像 ListView 同时知道和不知道它的 getCheckedItemPosition()?还是我走错了路?

public final class MyActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.my_activity);
itemList = (ListView)findViewById(R.id.ma_list);
listAdapter = new MyAdapter();
itemList.setAdapter(listAdapter);
itemList.setOnItemClickListener(
new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> av, View v, int pos, long id) { checkForm(); }
}
);
listAdapterSetup();
// this is where itemList.getCheckedItemPosition() returns -1
// when the listView has been re-built from NonConfiguration data:
checkForm();
}
}

最佳答案

我在发布我的问题后进行了另一次测试,因为我在描述我的观察时有了一个想法。

的确,我的怀疑得到了证实。

时机是关键

ListView 将在 onResume()(但不是之前)中报告正确的 getCheckedItemPosition() 值。

因此解决方案很简单:在 onResume() 中执行任何评估逻辑。

关于Android:ListView,同时在旋转/配置更改后记住并忘记其getCheckedItemPosition,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14875642/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com