代码之家  ›  专栏  ›  技术社区  ›  anon

如何在微调器中显示所选项目?

  •  0
  • anon  · 技术社区  · 14 年前

    我创建了两个微调器来显示应用程序中的数据。在第一个微调器中,列表的第一个项目始终直接显示,但在第二个微调器中,不显示任何内容,即使我单击下拉视图中的项目。有人能解释这种行为吗?

    以下是两个微调器初始化的代码:

    projects = new Spinner(lexs);
    projectAdapter = new ProjectAdapter();
    projects.setAdapter(projectAdapter);
    projects.setMinimumWidth(250);
    projects.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
    
    @Override
    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
       updateSpinners(position);                    
    }
    
    @Override
    public void onNothingSelected(AdapterView<?> parent) {
       // do nothing    
    }
    
    });
    
    projectsList = new Spinner(lexs);
    projectsList.setMinimumWidth(250);
    listAdapter = new ListAdapter();
    projectsList.setAdapter(listAdapter);
    projectsListLayer.addView(projectsList);
    

    自旋体项目是第一个正确工作的自旋体。ProjectsList是第二个无法正常工作的微调器。下面是适配器的两个实现:

    private class ProjectAdapter implements SpinnerAdapter {
    
            @Override
            public View getDropDownView(int position, View arg1, ViewGroup arg2) {
                TextView text = new TextView(lexs);
                text.setText(allProjects.get(position).getName());
                return text;
            }
    
            @Override
            public int getCount() {
                return allProjects.size();
            }
    
            @Override
            public Object getItem(int position) {
                return allProjects.get(position);
            }
    
            @Override
            public long getItemId(int position) {
                return position;
            }
    
            @Override
            public int getItemViewType(int arg0) {
                // TODO Auto-generated method stub
                return 0;
            }
    
            @Override
            public View getView(int position, View arg1, ViewGroup arg2) {
                TextView text = new TextView(lexs);
                text.setText(allProjects.get(position).getName());
                return text;
            }
    
            @Override
            public int getViewTypeCount() {
                // TODO Auto-generated method stub
                return 0;
            }
    
            @Override
            public boolean hasStableIds() {
                return false;
            }
    
            @Override
            public boolean isEmpty() {
                if (allProjects.size() == 0) {
                    return true;
                } else {
                    return false;
                }
            }
    
            @Override
            public void registerDataSetObserver(DataSetObserver arg0) {
                // TODO Auto-generated method stub
    
            }
    
            @Override
            public void unregisterDataSetObserver(DataSetObserver observer) {
                // TODO Auto-generated method stub
    
            }
    
        }
    
        private class ListAdapter implements SpinnerAdapter {
    
            @Override
            public View getDropDownView(int position, View view, ViewGroup parent) {
                TextView text = new TextView(lexs);
                text.setText(allLists.get(position).getName());
                return text;
            }
    
            @Override
            public int getCount() {
                return allLists.size();
            }
    
            @Override
            public Object getItem(int position) {
                return allLists.get(position);
            }
    
            @Override
            public long getItemId(int position) {
                return position;
            }
    
            @Override
            public int getItemViewType(int position) {
                // TODO Auto-generated method stub
                return 0;
            }
    
            @Override
            public View getView(int position, View convertView, ViewGroup parent) {
                TextView text = new TextView(lexs);
                text.setText(allLists.get(position).getName());
                return text;
            }
    
            @Override
            public int getViewTypeCount() {
                // TODO Auto-generated method stub
                return 0;
            }
    
            @Override
            public boolean hasStableIds() {
                // TODO Auto-generated method stub
                return false;
            }
    
            @Override
            public boolean isEmpty() {
                if (allLists.size() == 0) {
                    return true;
                } else {
                    return false;
                }
            }
    
            @Override
            public void registerDataSetObserver(DataSetObserver observer) {
                // TODO Auto-generated method stub
            }
    
            @Override
            public void unregisterDataSetObserver(DataSetObserver observer) {
                // TODO Auto-generated method stub
            }
    
        }
    

    在这里,我附上了问题的图片:

    http://www.freeimagehosting.net/image.php?7684c157b8.png

    1 回复  |  直到 14 年前
        1
  •  1
  •   Rich Schuler    14 年前

    我唯一能建议的就是插入一些日志语句并检查 allLists.size() > 0 在你之前和之后 updateSpinners 打电话。

    而且,现在我想起来了。您还需要通过调用 BaseAdapter#notifyDataSetChanged . 否则它将不知道它有新的数据要显示。所以你应该延长 BaseAdapter 实施 SpinnerAdapter . 基本适配器 将处理的实施 registerDataSetObserver unregisterDataSetObserver . 你可能还需要 更新订阅器 打电话给你 ListAdapter notifyDataSetChanged .

    退房 ArrayAdapter 来源。