android-PopupWindow内的ListView问题

android-PopupWindow内的ListView问题,第1张

概述我在PopupWindow中有一个ListView.PopupWindow像这样初始化window.setContentView(root);window.setTouchable(true);window.setFocusable(true);window.setOutsideTouchable(true);window.setWidth(WindowManager.LayoutParams.WRAP_CONTENT);win

我在PopupWindow中有一个ListVIEw. PopupWindow像这样初始化

    window.setContentVIEw(root);    window.settouchable(true);    window.setFocusable(true);    window.setoutsIDetouchable(true);    window.setWIDth(WindowManager.LayoutParams.WRAP_CONTENT);    window.setHeight(WindowManager.LayoutParams.WRAP_CONTENT);

然后是ListVIEw:

    fileList = (ListVIEw) root.findVIEwByID(R.ID.explorer_List);    fileList.setChoiceMode(ListVIEw.CHOICE_MODE_SINGLE);    fileList.setSelector(androID.R.drawable.screen_background_light_transparent);    fileList.setonItemClickListener(this);    [...]    @OverrIDe    public voID onItemClick(AdapterVIEw<?> adapter, VIEw v, int pos, long ID) {        selected = (file) fileList.getItemAtposition(pos);          }

像这样,一切正常,除了在滚动ListVIEw之前选择器不会显示在选择器上为止(尽管正确选择了该项目,但在列表滚动之前,视觉上没有显示所选内容).

如果我将PopupWindow设置为不可聚焦,则视觉选择可以正常工作(单击该项目时可以在视觉上选择该项目),但是从不调用onItemClick(),因此无法获得所选项目.

在两种情况下,即使存在选定的项目,ListVIEw.getSelectedItem()始终返回null.

关于如何解决这种情况有什么想法?提前致谢.

解决方法:

我最终使用了一个自定义适配器来存储选定的值,并从那里使用它进行标记:

public class fileExplorerAdapter extends ArrayAdapter<file> {    /** file names */    private List<file> values = new ArrayList<file>();    /** Currently selected position */    private int selected = -1;    public fileExplorerAdapter(Context context, List<file> values) {        super(context, R.layout.explorer_row, values);        this.values = values;    }    @OverrIDe    public VIEw getVIEw(int position, VIEw convertVIEw, VIEwGroup parent) {        // I kNow that my layout is always a TextVIEw        TextVIEw row = (TextVIEw) convertVIEw;        if (row == null) {            row = (TextVIEw) VIEwHelper.inflateVIEwByID(getContext(),                    R.layout.explorer_row);        }        // More code...        // Set up the background for selected element        if (selected == position) {            row.setBackgroundcolor(color.LTGRAY);        // OverrIDe background selector        } else {            row.setBackgroundcolor(color.transparent);        }        // More code...        return row;    }    /** This sets the selected position */    public voID setSelected(int position) {        selected = position;    }}

在为关联的ListVIEw实现OnItemClickListener的类上,我在适配器中设置了当前选定的项目.

@OverrIDepublic voID onItemClick(AdapterVIEw<?> adapter, VIEw v, int pos, long ID) {    fileExplorerAdapter fileadapter = (fileExplorerAdapter) fileList            .getAdapter();    fileadapter.setSelected(pos);}
总结

以上是内存溢出为你收集整理的android-PopupWindow内的ListView问题全部内容,希望文章能够帮你解决android-PopupWindow内的ListView问题所遇到的程序开发问题。

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

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1086266.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-27
下一篇 2022-05-27

发表评论

登录后才能评论

评论列表(0条)

保存