Android   发布时间:2022-04-28  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Android ==> ListView保持选择?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个表视图充满了项目,用户选择一个项目亮起,然后它恢复正常.有没有办法做到这一点,当用户在ListView中选择一个项目时,它保持选中状态,并突出显示

解决方法

显然,“消失的选择”是设计的;这是一个叫“ touch mode”的东西.我阅读了该文件,但我仍然不知道为什么他们认为这是一个好主意.我的猜测是,由于Android最初是为小屏幕设备而设计的,他们希望您可以在列表中填写屏幕,然后当用户单击某个项目时,移动到不同屏幕上的新列表.因此,用户不会意识到Android失去了所选项目的跟踪.

但是,如果您希望用户选择一个项目,然后在同一个屏幕上显示有关该项目的信息,则这种行为是非常烦人的.如果选择消失,用户应该如何知道他们点击什么(假设用户有金鱼的注意力)?

一个可能的解决方案是将所有列表项更改为单选按钮.我真的不喜欢这个解决方案,因为它浪费了屏幕空间.我宁愿只使用背景颜色来显示选择的项目.到目前为止,我已经看到了一个解决方案,但是并不完全或一般.所以这里是我的解决方案:

1.在您的XML布局文件

转到您的ListView元素和以下属性:android:choiceMode =“singleChoice”.我不完全确定这是什么(本身不允许用户选择任何东西),但没有这个属性,下面的代码不起作用.

2.定义以下类

它用于跟踪所选项目,还允许您模拟Java中的传递参

public class IntHolder {
    public int value;
    public intHolder() {}
    public intHolder(int v) { value = v; } 
}

3.将以下代码在某

我会假设你把它放在你的活动中,但它可以在任何类中真的:

static void setListItems(Context context,AdapterView listView,List listItems,final IntHolder SELEctedPosition)
{
    setListItems(context,listView,listItems,SELEctedPosition,android.R.layout.simple_list_item_1,android.R.layout.simple_spinner_dropdown_item);
}
static void setListItems(Context context,final IntHolder SELEctedPosition,int list_item_id,int dropdown_id)
{
    listView.setOnItemClickListener(new AdapterView.onItemClickListener() {
        public void onItemClick(AdapterView<?> list,View lv,int position,long id) {
            SELEctedPosition.value = position;
        }
    });
    ArrayAdapter<CharSequence> adapter = new ArrayAdapter<CharSequence>(context,list_item_id,listItems) { 
        @Override
        public View getView(int position,View convertView,ViewGroup parent) {
            View itemView = super.getView(position,convertView,parent);
            if (SELEctedPosition.value == position)
                itemView.setBACkgroundColor(0xA0FF8000); // orange
            else
                itemView.setBACkgroundColor(Color.TRANSPARENT);
            return itemView;
        }
    };
    adapter.setDropDownViewresource(dropdown_id);
    listView.setAdapter(adapter);
}

代码执行以下两件事情:它将您的列表项(例如List< String>)附加到您的ListView,并用一些改变所选项目背景的代码覆盖ArrayAdapter.getView().

4.使用该代码设置列表

例如:

ListView _list;
IntHolder _SELEctedItem = new IntHolder(-1); // nothing SELEcted at first

@Override
protected void onCreate(Bundle savedInstanceStatE) {
    ...
    _list = (ListView)findViewById(R.id.list);
    List<String> items = Arrays.asList("Item 1","Item 2","Item 3");
    setListItems(this,_list,items,_SELEctedItem);
}

就这样!上面假设你想要单选.通过对getView()的一些小的修改,您可以支持多选,我猜,但您应该可以使用复选框.

警告:此解决方案需要进一步开发.如果用户使用箭头键或按钮来选择项目,则不会从IntHolder的角度选择该项目.如果用户按下未标记的按钮(该按钮的名称是什么?“输入”?),则该项目将被“正式”选择,但是您还有另一个问题,因为如果用户再次使用箭头键,那么它将会看起来喜欢两个项目被选中.如果您想知道如何使IntHolder中的“内部选择”与“键盘选择”同步,或者称之为任何内容,请发表评论.它叫什么呢?

大佬总结

以上是大佬教程为你收集整理的Android ==> ListView保持选择?全部内容,希望文章能够帮你解决Android ==> ListView保持选择?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。