我在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问题所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)