我已经发布了同样的问题了几次,却一直没有得到解决。 我有一个ListFragment
,我想强调在列表中选择的项目。 我一直在考虑建议使用“选择”。 我不知道如何使用这个选择。 我ListFragment
类是:
// Create an adapter with list of stores and populate the list with
// values
ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(),
android.R.layout.simple_list_item_1, StoreList);
setListAdapter(adapter);
mDbHelper.close();
}
/*
* (non-Javadoc)
*
* Handles the event when an item is clicked on left pane, performs action
* based on the selection in left pane
*
* @see android.app.ListFragment#onListItemClick(android.widget.ListView,
* android.view.View, int, long)
*/
@Override
public void onListItemClick(ListView l, View v, int position, long id) {
String selectedStore = (String) getListAdapter().getItem(position);
DetailFragment fragment = (DetailFragment) getFragmentManager()
.findFragmentById(R.id.detailFragment);
if (fragment != null && fragment.isInLayout()) {
v.setBackgroundColor(getResources().getColor(R.color.BLUE));
// passes selectedStore to detail fragment
fragment.setText(selectedStore);
// getItemList(selectedStore);
}
使用的setBackground永久设置颜色,但我想选择另一项目时它去了。 我知道如何在使用选择ListView
,如果我没有给定义的任何XML,但在我的情况Listview
,那么我将如何使用“选择”? 我使用android.R.layout.simple_list_item_1
而被预先确定。
Answer 1:
以下为我工作:
RES /颜色/ menu_highlight.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:state_pressed="true"
android:drawable="@color/red" />
<item
android:state_selected="true"
android:drawable="@color/red" />
<item
android:drawable="@color/white" />
</selector>
RES /值/ colors.xml:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="white">#FFFFFF</color>
<color name="red">#FF0000</color>
</resources>
RES /布局/ menuitem.xml ::(XML列表中的所有项目)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="wrap_content"
android:layout_width="fill_parent">
<TextView
android:id="@+id/textmenu"
android:layout_height="wrap_content"
android:text="text"
android:textColor="#FFFFFF"
android:background="@color/menu_highlight"
android:visibility="visible"
android:layout_width="fill_parent" />
</LinearLayout>
最后,在ListFragment类,添加视图以前和下面的代码添加到onlistitemclick功能。(中提到ListFragment:高亮选中的行 )
public class MenuListFragment extends ListFragment{
View previous;
@Override
public void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);
//Logic to highlight selected item
previous.setSelected(false);
v.setSelected(true);
previous=v;
}
}
Answer 2:
从您ListView
,调用setChoiceMode(ListView.CHOICE_MODE_SINGLE)
然后,只要你想突出一个选择项,调用setItemChecked(index, true)
。
Answer 3:
我想同样的,我也没找到什么好的解决办法。 我实际上做使用此代码来设置监听器是:
listView.setOnItemClickListener(new AdapterView.OnItemClickListener(){
public void onItemClick(AdapterView<?> parent, View view, int position, long id){
list_adapter.setSelectedPosition(position);
listView.invalidate();
}
});
在列表适配器定义下列公共方法
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View rowView = GuiBuilder.createHeroListItemView(heroes.get(position),getContext(),parent,false);
if(position == selected_pos){
rowView.setBackgroundColor((rowView.getResources().getColor(R.color.list_item_selected_color)));
}
return rowView;
}
public void setSelectedPosition(int selected_pos){
this.selected_pos = selected_pos;
}
public int getSelectedPosition(){
return selected_pos;
}
也就是说,我更改列表项的背景编程。 此外,以点击列表元素时避免闪烁效果我不为按下状态定义任意选择
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_focused="true"
android:drawable="@drawable/list_item_focused_color" />
<item android:drawable="@drawable/list_item_default_color" />
</selector>
这按预期工作对我来说。 我没有找到任何更好的解决方案,因为的setSelected(真)不能在列表中的项目工作!
Answer 4:
我没有得到我想要的东西,所以我不停地挖掘,并用“便宜”的解决方案可能不是最好的做法,但做这项工作上来。 我想选择时要突出显示的项目,并在从listFragment选择其他项的颜色应该消失。 这是什么工作了我-我定义的静态View V;
和初始化它V = new View(getActivity());
然后在我的
onListItemClick(ListView的L, 视图V,INT位置,长ID)
V.setBackgroundResource(0);
v.setBackgroundResource(R.color.BLUE);
V = v;
Answer 5:
这在工作很不错,我ListFragment
,但我认为它仅适用于Android 4.0及了。 我创建了与列表项布局简单android:background="?android:attr/activatedBackgroundIndicator
(Android中的情况下,低于4.0则需要ceate中可绘制类似的一个):
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="?android:attr/listPreferredItemHeight"
android:gravity="center_vertical"
android:background="?android:attr/activatedBackgroundIndicator"
android:orientation="horizontal" >
<TextView
android:id="@+id/list_item_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ellipsize="end"
android:singleLine="true"
android:textAppearance="?android:attr/textAppearanceListItemSmall"
android:gravity="center_vertical"
android:layout_margin="@dimen/double_view_margin" />
然后,只需创建一个简单的ArrayAdapter
使用此布局和设置选择模式单一:
final ArrayAdapter<String> labelsAdapter = new ArrayAdapter<String>(getActivity(), R.layout.item_simple_list_item, R.id.list_item_text, labels);
setListAdapter(labelsAdapter);
getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE);
之后,你可以hightlight必要的项目setItemChecked
方法:
@Override
public void onListItemClick(final ListView l, final View v, final int position, final long id) {
getListView().setItemChecked(position, true);
}
Answer 6:
我的代码
getListView().setItemChecked(0, true);
后
setListAdapter(oAdapter);
代码块
Answer 7:
类似的事情键入-a1pha但与选择,一旦你有看法,你可以view.setSelected(真),并且将增加你已经在你的选择中定义的样式。 你需要一次执行行动,清除标志。
文章来源: Highlight selected item in “ListFragment”?