ListFragment 中的选定项目未突出显示

Posted

技术标签:

【中文标题】ListFragment 中的选定项目未突出显示【英文标题】:Selected item in ListFragment doesn't get highlighted 【发布时间】:2018-08-25 17:10:07 【问题描述】:

我正在尝试在我的 ListFragment 中突出显示以前选择的项目,但它对我不起作用。突出显示是唯一的问题,因为我能够看到我在控制台中选择的内容,但无论出于何种原因,着色都不起作用。

这是我用来突出显示它的代码

@Override
public void onStart() 
    super.onStart();
    ListView view = getListView();
    TextView previousSelected = null;
    int selectedPosition = 0;
    if(view != null) 
        int adapterSize = view.getAdapter().getCount();
        if (selectedView != null) 
            for (int i = 0; i < adapterSize; i++) 
                Log.d(TAG, "view getchildat " + view.getAdapter().getView(i, null, view) + " selected " + selectedView);
                if (((TextView) view.getAdapter().getView(i, null, view)).getText().toString().equalsIgnoreCase(((TextView) selectedView).getText().toString()))
                    previousSelected = (TextView) view.getAdapter().getView(i, null, view);
                    Log.d(TAG, "selected is " + previousSelected.getText().toString());
                    view.setSelection(i);
                    view.setSelected(true);
                    view.setFocusable(true);
                    selectedPosition = i;
                
            
         else if (tagScan.getLastFeedback()[0] != null) 
            Log.d(TAG, "count fragment is " + count);
            for(int i = 0; i < adapterSize; i++)
                Log.d(TAG, "view getchildat " + ((TextView)view.getAdapter().getView(i, null, view)).getText().toString() + " selected " + tagScan.getLastFeedback()[count]);
                if (((TextView) view.getAdapter().getView(i, null, view)).getText().toString().equalsIgnoreCase(tagScan.getLastFeedback()[count]))
                    previousSelected = (TextView) view.getAdapter().getView(i, null, view);
                    Log.d(TAG, "selected is " + previousSelected.getText().toString());
                    view.setSelection(i);
                    view.setSelected(true);
                    view.setFocusable(true);
                
            
        
        if(previousSelected != null)
            Log.d(TAG,"set color of the previous selection " + previousSelected.getText().toString());
            previousSelected.setBackgroundColor(Color.BLUE);
            previousSelected.setTextColor(Color.WHITE);
            selectedView = previousSelected;

        
    

我尝试使用选择器,但也没有运气:

 <?xml version="1.0" encoding="utf-8" ?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:state_selected="true"
        android:drawable="@drawable/list_selector_selected"/>
    <item
        android:state_activated="true"
        android:drawable="@drawable/list_selector_selected"/>
    <item
        android:state_focused="true"
        android:drawable="@drawable/list_selector_selected"/>
    <item
        android:state_pressed="true"
        android:drawable="@drawable/list_selector_selected"/>
    <!--<item-->
        <!--android:drawable="@drawable/list_selector_selected" />-->
</selector>

对我来说,在onClickListener 中突出显示效果很好,所以我不确定为什么它在onStart 中不起作用。

【问题讨论】:

您可以尝试将其移至onViewCreatedonResume 而不是onStart 吗?这可能是这里的问题。 两个都试过了,可惜都没有成功 item的xml是什么样子的? 我没有项目的 xml,你的意思是 list_selector_selected 我明白了,也许你应该考虑使用RecyclerView 在这里有更多的灵活性,并有你的自定义项目视图,你设置你的选择器。 【参考方案1】:

通过像这样覆盖适配器的getView 来修复它

new ArrayAdapter<String>(this, R.layout.feedback_list, feedback.getOptions())
                            @Override
                            public View getView(int position, View convertView, ViewGroup parent) 
                                View view = super.getView(position, convertView, parent);
                                Log.d(TAG,"view is " + view + " selected is " + listFragment.selectedView);
                                if(listFragment.selectedPosition != null) 
                                    if (listFragment.selectedPosition[0] == position) 
                                        view.setBackgroundColor(R.color.colorPrimary);
                                    
                                
                                return view;
                            
                        ;

【讨论】:

以上是关于ListFragment 中的选定项目未突出显示的主要内容,如果未能解决你的问题,请参考以下文章

突出显示可展开列表中的选定项目

突出显示 React-Native FlatList 中的选定项目

如何突出显示 Vuetify 菜单中的选定项目?

单击选定的 UIButton 时未显示 UIButton 突出显示状态

如何突出显示 Recycler View 的选定项目?

从 JComboBox 弹出窗口中获取当前突出显示的项目(未选中的项目)