突出“ListFragment”选定的项目?(Highlight selected item in

2019-06-27 10:03发布

我已经发布了同样的问题了几次,却一直没有得到解决。 我有一个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”?