Android:在ListView打开时将项目设置为选中状态?

kik*_*iki 15 android focus listviewitem android-listview

一个活动有一个Button和一个ListView.最初,只有Button可见.按下按钮时,将显示ListView.显示时,我是否可以将一个特定项目显示为选中/聚焦?

用例可以是假设它是语言设置列表,当列表打开时,当前选择的语言必须显示为突出显示.

如果我知道该项目的索引,如何将其设置为专注于显示?

小智 40

我发布我的解决方案,因为谷歌仍然不知道答案.

getListView().setItemChecked(selectedGroupIndex, true);
Run Code Online (Sandbox Code Playgroud)


onl*_*ygo 15

简而言之,ListView :: setSelection(int position)就是您所需要的.但是,根据设备是否处于触摸模式,它可能有也可能没有视觉效果(背景突出显示).有关更多详细信息,请参阅Android ListView选择问题


Bob*_*obs 13

如果您使用AdapterListView将此代码添加到您的适配器:

public class MyAdapter extends ArrayAdapter<MyClass> {
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        if (convertView == null) {
            LayoutInflater inflator = (LayoutInflater) getContext()
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            rowView = inflator.inflate(R.layout.my_adapter, null);
        } else {
            rowView = (View) convertView;
        }

        //...

        // set selected item
        LinearLayout ActiveItem = (LinearLayout) rowView;
        if (position == selectedItem){
            ActiveItem.setBackgroundResource(R.drawable.background_dark_blue);

            // for focus on it
            int top = (ActiveItem == null) ? 0 : ActiveItem.getTop();
            ((ListView) parent).setSelectionFromTop(position, top);
        }
        else{
            ActiveItem.setBackgroundResource(R.drawable.border02);
        }    
    }

    private int selectedItem;

    public void setSelectedItem(int position) {
        selectedItem = position;
    }    
}
Run Code Online (Sandbox Code Playgroud)

在你的Activity:

myAdapter.setSelectedItem(1);
Run Code Online (Sandbox Code Playgroud)