【问题标题】:Make onClickListener of Custom ListView制作自定义ListView的onClickListener
【发布时间】:2014-02-01 17:00:32
【问题描述】:

我已经实现了一个自定义列表视图,我在创建它的 onClickListener 时遇到了问题。 在 OnCreate() 中

lv = (ListView) findViewById(R.id.listView1);
lv.setAdapter(new CustomAdapter(MainActivity.this,q));

&CustomAdapter 类:

 class CustomAdapter extends ArrayAdapter<GS>
  {
       ArrayList<GS> list;
       LayoutInflater mInfalter;    
       public CustomAdapter(Context context, ArrayList<GS> list)
       {
           super(context,R.layout.customlayout,list);
          this.list= list;  
          mInfalter = LayoutInflater.from(context);
        for(int i=0;i<list.size();i++)
        {
            Log.i("................",""+list.get(i).getAS_name());
        }
       }
}
       @Override
        public View getView(int position, View convertView, ViewGroup parent) {
          ViewHolder holder;
          Log.i("..........","Hello in getView");
          if(convertView==null)
          {
               convertView = mInfalter.inflate(R.layout.customlayout,parent,false);
               holder = new ViewHolder();
               holder.tv1 = (TextView)convertView.findViewById(R.id.textView1); 
               convertView.setTag(holder); 
          }else{
                holder = (ViewHolder)convertView.getTag();
          } 

                holder.tv1.setText(list.get(position).getAS_name());

          return convertView;
    }

  }

 static class ViewHolder
    {
        TextView tv1;
    }  

它的 OnClickListener 是否必须在 getView() 方法中创建? 或者它可以在 OnCreate() 中制作? 怎么做?

谢谢

【问题讨论】:

    标签: android listview android-listview onclick onclicklistener


    【解决方案1】:

    这是我刚刚整理并测试的一个独立示例,希望对您有所帮助:

    import java.util.ArrayList;
    import java.util.List;
    
    import android.app.Activity;
    import android.content.Context;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.AdapterView;
    import android.widget.AdapterView.OnItemClickListener;
    import android.widget.ArrayAdapter;
    import android.widget.ListView;
    import android.widget.Toast;
    
    public class MainActivity extends Activity implements OnItemClickListener {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            List<MyCustomAdapterItem> items = new ArrayList<MyCustomAdapterItem>();
            items.add(new MyCustomAdapterItem("1", "one"));
            items.add(new MyCustomAdapterItem("2", "two"));
    
            ListView listView = (ListView) findViewById(R.id.listView1);
            listView.setAdapter(new MyAdapter(this, android.R.layout.simple_list_item_1, items));
            listView.setOnItemClickListener(this);
        }
    
        private class MyAdapter extends ArrayAdapter<MyCustomAdapterItem> {
            public MyAdapter(Context context, int textViewResourceId, List<MyCustomAdapterItem> objects) {
                super(context, textViewResourceId, objects);
            }
        }
    
        private class MyCustomAdapterItem {
            private String id;
            private String text;
    
            public MyCustomAdapterItem(String id, String text) {
                this.id = id;
                this.text = text;
            }
    
            public String getText() {
                return text;
            }
    
            public String getId() {
                return id;
            }
    
            @Override
            public String toString() {
                return getText();
            }
        }
    
        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
            MyCustomAdapterItem myCustomAdapterItem = (MyCustomAdapterItem) adapterView.getItemAtPosition(position);
            if ("1".equals(myCustomAdapterItem.getId())) {
                Toast.makeText(this, "I can't believe you just selected this item!!!", Toast.LENGTH_SHORT).show();
            } else if ("2".equals(myCustomAdapterItem.getId())) {
                Toast.makeText(this, "This item is better than the first", Toast.LENGTH_SHORT).show();
            }
        }
    }
    

    请注意,在此示例中,Activity 实现了 AdapterView OnItemClickListener 接口。每当您单击列表中的任何项目时,都会调用 onItemClick 方法。只需确保将 Activity 也设置为 OnItemClickListener,否则不会调用 onItemClick:

    listView.setOnItemClickListener(this)
    

    这个 onItemClick 实现演示了一种方法,您可以根据单击的项目有条件地执行不同的逻辑。如果您提前知道固定位置索引,您也可以只使用位置参数。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-15
    • 2020-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-15
    • 1970-01-01
    相关资源
    最近更新 更多