android - 如何在 ListView 上设置 onitemclicklistener

标签 android listview onitemclicklistener

我有一个扩展 ListView 的类。我需要在该 ListView 上有 onitemclicklistener。以下代码不起作用。我的意思是点击监听器不工作。如何解决?

listview.xml

 <ListView
android:id="@android:id/list"
android:layout_width="match_parent"
android:layout_height="fill_parent"
android:layout_marginBottom="47dip"
android:layout_marginTop="47dip" >
</ListView>

elements.xml

<RelativeLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="46dp"
        android:gravity="center" >

        <ToggleButton
            android:id="@+id/toggleButton1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:layout_alignParentTop="true"
            android:text="ToggleButton"
            android:textOff="Inactive"
            android:textOn="Active" />

        <TextView
            android:id="@+id/label_note"
            android:layout_width="wrap_content"
            android:layout_height="30dp"
            android:layout_centerVertical="true"
            android:layout_marginRight="38dp"
            android:layout_marginLeft="2dip"
            android:layout_toRightOf="@+id/check_note"
            android:text="@+id/label"
            android:textSize="25px" />

        <CheckBox
            android:id="@+id/check_note"
            android:layout_width="30dip"
            android:layout_height="30dip"
            android:layout_alignParentLeft="true"
            android:layout_centerVertical="true"
            android:visibility="gone"
            android:button="@drawable/customdrawablecheckbox" />

    </RelativeLayout>

List.java

public class List extends ListActivity{
....

public void onCreate(Bundle icicle) {

        this.setContentView(R.layout.listview);
        super.onCreate(icicle);



}
ArrayAdapter<ListModel> adapter = new InteractiveArrayAdapter(
                this, getModel(), false);
        setListAdapter(adapter);

        final ListView list1 = getListView();
        list1.setItemsCanFocus(true);
        list1.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int pos, long l) {
                // TODO Auto-generated method stub
            //  HashMap<String, String> o = (HashMap<String, String>) list1.getItemAtPosition(pos);                   
                Toast.makeText(ContactsNoteList.this, "ID '" +list.get(pos).getName()+" "+list.get(pos).getId().toString() + "' was clicked.", Toast.LENGTH_LONG).show(); 

            }

        });

..}

    private List<ListModel> getModel() {


    for (int i=0;i<3;i++)       
list.add(get("Elem"+i.toString(),i);
            }
        }

        return list;
    }

    private ListModel get(String s1,int Id) {
        return new ListModel(s1,Id);
    }

InteractiveArrayAdapter.java

InteractiveArrayAdapter extends
        ArrayAdapter<ListModel> {

    private final List<ListModel> list;
    private final Activity context;
    private boolean visibility;
    public InteractiveArrayAdapter(Activity context, List<ListModel> list,boolean visibility) {
        super(context, R.layout.elements, list);
        this.context = context;
        this.list = list;
        this.visibility=visibility;

    }


    static class ViewHolder {
        protected TextView text;
        protected CheckBox checkbox;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View view = null;
        if (convertView == null) {
            LayoutInflater inflator = context.getLayoutInflater();
            view = inflator.inflate(R.layout.elements, null);


            final ViewHolder viewHolder = new ViewHolder();
            viewHolder.text = (TextView) view.findViewById(R.id.label_note);
            viewHolder.checkbox = (CheckBox) view.findViewById(R.id.check_note);
            viewHolder.checkbox
                    .setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {



@Override
public void onCheckedChanged(CompoundButton buttonView,boolean isChecked) {
                                ListModel element = (ListModel) viewHolder.checkbox.getTag();
                                element.setSelected(buttonView.isChecked());

                            }
                        });
            view.setTag(viewHolder);
            viewHolder.checkbox.setTag(list.get(position));
        } else {
            view = convertView;
            ((ViewHolder) view.getTag()).checkbox.setTag(list.get(position));
        }

        ViewHolder holder = (ViewHolder) view.getTag();
        holder.text.setText(list.get(position).getName());
        holder.checkbox.setChecked(list.get(position).isSelected());
        if (visibility==true)
        holder.checkbox.setVisibility(View.VISIBLE);
        else
            holder.checkbox.setVisibility(View.INVISIBLE);
        return view;
    }
}

需要帮助。谢谢。欣赏

最佳答案

使用:

   view.setOnClickListener(new OnClickListener() {          
            @Override
            public void onClick(View v) {... 
                  Toast.makeText(context,"you clicked item: "+position,Toast.Lenght_LONG).show();
                  //code you want to execute on click of list item...
            }
   });
   return view;

在您的适配器类中。

EDIT 更改了示例代码...

关于android - 如何在 ListView 上设置 onitemclicklistener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10346267/

相关文章:

php - 为什么我的 mysql 表的后续结果没有在 ListView 中创建新对象?

android - 通过 AIDL 从远程服务到应用程序的复杂类型

java - 网页在 Cordova Android 应用程序中不可用

android - 使用 MPAndroidChart 库从折线图中删除点标签

android - 如何自定义设置可绘制位置CheckedTextView?

java - 使用 JSCH (android) 将 ssh 日志打印到列表

Android ListView OnItemClickListener 对比。查看 OnClickListener

android - 使用拖动排序 ListView (DSLV) 时不会触发 setOnItemLongClickListener 和 setOnItemClickListener

java - 打开 Activity 期间应用程序崩溃

java - 如何在不使用线程的情况下更新 fragment 中的进度条