我正在开发一个使用两个片段的应用程序。其中一个片段使用ListView显示项目,单击时,第二个片段自行更新(它是一个字典应用程序)。 在ListView中选择一个项目后,我希望它突出显示。我通过在ListView项的XML文件中使用以下属性来实现此目的。
android:choiceMode="singleChoice"
android:listSelector="@android:color/darker_gray"
就项目的选择而言,此工作正常。但问题是当我滚动列表时,选择有时会保留在列表的底部或顶部(视情况而定),即使列表中不存在所选项目。以下是解释我的问题的截图。
第一张照片显示没有选择;在第二张图片中,我选择了101,因此更新了第二张片段。在第三张图中,即使未显示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上传了项目,如果有人想看看的话。
答案 0 :(得分:1)
在Eclipse中,您可以创建一个Master-Detail Flow,它是您尝试做的一个示例。
为此创建一个“新的Android应用程序”,在第三个或第四个屏幕中称为“创建活动”,为您提供三种可能性,选择一个名为“主/细节”的。
这不能解答您的问题,而只是指向一个可以详细说明的工作示例。
现在回答你的问题,我看了你的代码,发现了错误。
以下是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;
}
在您的代码中,以下2行是错误的
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
而不是手动设置selector
。