gpt4 book ai didi

android - ListView 项目保持突出显示

转载 作者:行者123 更新时间:2023-11-30 03:08:24 28 4
gpt4 key购买 nike

我正在开发一个使用两个 fragment 的应用程序。其中一个 fragment 使用 ListView 来显示项目,单击时,第二个 fragment 会自行更新(它是一个字典应用程序)。在 ListView 中选择一个项目后,我希望突出显示它。我通过在 ListView 项目的 XML 文件中使用以下属性来实现这一点。

android:choiceMode="singleChoice"
android:listSelector="@android:color/darker_gray"

就项目的选择而言,这很好用。但问题是当我滚动列表时,选择有时会停留在列表的底部或顶部(视情况而定),即使列表中不存在所选项目。以下是解释我的问题的屏幕截图。

enter image description here

enter image description here

enter image description here

第一张图没有选择;在第二张图片中,我选择了 101,因此更新了第二个 fragment 。在第三张图片中,即使未显示 101,也突出显示了 ListView 的一部分。

有什么问题?

谢谢。

编辑这是 OnItemClick() 方法。

public void onItemClick(AdapterView<?> arg0, View view, int arg2, long arg3) {

String selectedWord = words.get(arg2); //words in an ArrayList which holds all the words displayed in this fragment.

Meaning meaningFragment = (Meaning) getSupportFragmentManager().
findFragmentById(R.id.fragmentMeaning);
meaningFragment.searchMeaning(selectedWord); //this method updates the other fragment.
}

编辑:

这个问题还没有解决。我已将项目上传到 github如果有人想看看。

最佳答案

在 Eclipse 中,您可以创建一个主从流程,这是您正在尝试做的事情的示例。

为此创建一个“新的 Android 应用程序”,在称为“创建 Activity ”的第三个或第四个屏幕中,为您提供了三种可能性,选择一个称为“主/详细信息”。

这不会为您的问题提供答案,而只是将您指向一个您可以从中详细说明的工作示例。

现在回答你的问题,我查看了你的代码并发现了错误。

这是 onCreateView() 的工作代码。我注释掉了错误的代码行。

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// TODO Auto-generated method stub
View v = inflater.inflate(R.layout.fragment_one, container);

listView = (ListView) v.findViewById(R.id.listView);
listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);

//listView.setAdapter(new ArrayAdapter<String>(getActivity(),
// android.R.layout.simple_dropdown_item_1line, array));
//listView.setSelector(android.R.color.holo_blue_dark);

listView.setAdapter(new ArrayAdapter<String>(getActivity(),
android.R.layout.simple_list_item_activated_1, array));

listView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int position,
long arg3) {
listView.setItemChecked(position, true);
FragmentTwo frag = (FragmentTwo) getActivity()
.getFragmentManager()
.findFragmentById(R.id.fragmentTwo);
frag.updateTextView(array[position]);
}
});

return v;
}

在您的代码中,以下两行是错误的

listView.setAdapter(new ArrayAdapter<String>(getActivity(),
android.R.layout.simple_dropdown_item_1line, array));
listView.setSelector(android.R.color.holo_blue_dark);

您在这里所做的是设置一个 simple_dropdown_item_1line,这不是您想要的,您需要手动设置 selector

您必须使用 simple_list_item_activated_1 而不是手动设置选择器。

listView.setAdapter(new ArrayAdapter<String>(getActivity(),
android.R.layout.simple_list_item_activated_1, array));
//listView.setSelector(android.R.color.holo_blue_dark);

如果您想要自定义选择器颜色,可以通过复制 simple_list_item_activated_1 并根据需要对其进行编辑并调用编辑后的布局来创建自定义选择器。不过,我建议使用默认颜色,这样当 Android 决定更改其配色方案时,您就会遵守新配色方案。

总之,要使 ListView.CHOICE_MODE_SINGLE 正常工作,您必须使用 simple_list_item_activated_1 而不是手动设置 选择器

关于android - ListView 项目保持突出显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21398739/

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