【问题标题】:How do i determine the items populating listview?我如何确定填充列表视图的项目?
【发布时间】:2012-08-29 13:40:45
【问题描述】:

我是 android 的菜鸟,我正在使用 arrayilst 和自定义适配器填充列表视图。我想设置我的列表视图 onClickListener 以根据填充列表视图的项目执行命令。列表视图动态填充来自 arraylist 的项目。我已经尝试了 position 和 id 参数,但没有成功。非常感谢任何帮助。

我如何实例化 listview、arraylist 和适配器

    portfoliolist = (ListView) findViewById(R.id.listViewPortfolios);
    users = new ArrayList<PortfolioRecord>();
    portfoliolist.setAdapter(new UserItemAdapter(this, R.layout.simplerow, users));
    portfoliolist.setOnItemClickListener(this);     

我的自定义适配器。

public class UserItemAdapter extends ArrayAdapter<PortfolioRecord> {
    private ArrayList<PortfolioRecord> users;

    public UserItemAdapter(Context context, int textViewResourceId, ArrayList<PortfolioRecord> users) {
        super(context, textViewResourceId, users);
        this.users = users;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View v = convertView;
        if (v == null) {
            LayoutInflater vi = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            v = vi.inflate(R.layout.simplerow, null);
        }

        PortfolioRecord user = users.get(position);         
        if (user != null) {
            TextView portfolioname = (TextView) v.findViewById(R.id.portfolioname);
            TextView currentvalue = (TextView) v.findViewById(R.id.currentvalue);

            if (portfolioname != null) {
                portfolioname.setText(user.portfolioname);
            }

            if(currentvalue != null) {
                currentvalue.setText("Current Value: " + user.currentvalue );
            }
        }
        return v;
    }
}

public class PortfolioRecord {
    public String portfolioname;
    public String currentvalue;

    public PortfolioRecord(String portfolioname, String currentvalue) {
        this.portfolioname = portfolioname;
        this.currentvalue = currentvalue;       
    }
}

我如何将项目添加到数组列表:

            user1 = new PortfolioRecord(pn10, denomination10+portfoliovalue10);        
        users.add(user1);

我已将 Usernull、user1 和 user2 添加到我的数组列表中。我如何识别这些物品?我已经尝试了以下代码,但没有成功

public void onItemClick(AdapterView parent, View itemClicked, int position,
        long id) {
     TODO Auto-generated method stub
    switch(parent.getId()){
    case R.id.listViewPortfolios:
        if(portfoliolist.getSelectedItem()==usernull){
            openCustomDialog();
        }else if(portfoliolist.getSelectedItem()==user1){
            whichportfolio=1;               
        }else if(portfoliolist.getSelectedItem()==user2){
            whichportfolio=2;               
        }
     break;}}

【问题讨论】:

    标签: android listview arraylist adapter


    【解决方案1】:

    无需实现 OnItemSelectedListener。只需在现有的 OnItemClick 方法中使用它:

    public void onItemClick(AdapterView parent, View itemClicked, int position,
            long id) {
        // TODO Auto-generated method stub
         PortfolioRecord user = users.get(position);
    
            // I'm not certain what this code block does...
            if(user.equals(usernull)){
                 openCustomDialog();
            }else if(user.equals(user1)){
                whichportfolio=1;              
            }else if(user.equals(user2)){
                whichportfolio=2;             
            }}
    

    【讨论】:

      【解决方案2】:

      假设您的投资组合记录对象具有以下内容:getTypeofUser()

      portfoliolist.setOnItemClickListener(new OnItemClickListener() {
          @Override
          public void onItemClick(AdapterView<?> parent, View view, int position,long id) {
              String typeofUser =users.get(position).getTypeofUser();
                      if(typeofUser == user1 ){
                          whichportfolio=1; 
                       }
          }
          });
      

      【讨论】:

        【解决方案3】:

        我建议更改为 OnItemSelectedListener,然后您可以简单地通过以下方式获取 PortfolioRecord:

        listView.setOnItemSelectedListener(new OnItemSelectedListener() {
            public void onItemSelected(AdapterView parent, View view, int position, long id) {
                // Get the user (PortfolioRecord) that was selected
                PortfolioRecord user = users.get(position);
        
                // I'm not certain what this code block does...
                if(user.equals(usernull)){
                     openCustomDialog();
                }else if(user.equals(user1)){
                    whichportfolio=1;               
                }else if(user.equals(user2)){
                    whichportfolio=2;               
                }
            }
        });
        

        【讨论】:

        • 感谢您的建议,但我仍然没有运气。
        • 不,错误。我在 onCreate 中实现了您的代码,而 listview 没有响应。然后我尝试在 OnItemclick 方法中实现它也没有结果。
        • 除了 OnItemSelectedListener 之外,您的 ListView 不应有任何其他侦听器,并且您的布局 simplerow.xml 也不能有任何侦听器。这些额外的侦听器在触摸事件到达 OnItemSelectedListener 之前拦截它。仔细检查您的调试器或 LogCat 语句是否输入 onItemSelected()
        猜你喜欢
        • 2017-08-10
        • 1970-01-01
        • 2012-08-15
        • 1970-01-01
        • 2019-10-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-01-05
        相关资源
        最近更新 更多