Android list view setOnItemClickListener not working

不问归期 提交于 2020-01-29 13:22:45

问题


I want to hide the edit text and button field initially in list view and show that edit text and button for a particular raw in list view when that raw is clicked.So I tried to set the height to 0 in layout xml and then set it to some other value when user clicks on a raw, but it is not working I think my list view click event is not working. In the Android layout that I have list view there are Image view as a button, edit text field and list view also. Like follows

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainPortal" >

<ListView
    android:id="@+id/employeeListView"
    android:layout_width="650dp"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true"
    android:layout_centerVertical="true"
    android:layout_marginRight="25dp"
    android:clickable="true">
</ListView>

<EditText
    android:id="@+id/empPin"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_above="@+id/iv_start_journey_btn"
    android:layout_marginBottom="56dp"
    android:layout_marginRight="17dp"
    android:layout_toLeftOf="@+id/employeeListView"
    android:ems="10"
    android:inputType="number"
    android:hint="@string/add_emp_pin_hint" >

    <requestFocus />
</EditText>

<ImageView
    android:id="@+id/iv_start_journey_btn"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignBottom="@+id/employeeListView"
    android:layout_alignRight="@+id/empPin"
    android:layout_marginBottom="84dp"
    android:onClick="startJourney"
    android:src="@drawable/start" />

</RelativeLayout>

I have used following custom lay out for the list view

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

<ImageView
    android:id="@+id/emp_avatar"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true"
    android:layout_marginTop="18dp"
    android:adjustViewBounds="true"
    android:maxHeight="80dp"
    android:maxWidth="80dp"
    android:src="@drawable/person" />

<TextView
    android:id="@+id/emp_number"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignTop="@+id/emp_avatar"
    android:layout_toRightOf="@+id/emp_avatar"
    android:text="Medium Text"
    android:textAppearance="?android:attr/textAppearanceMedium" />

<EditText
    android:id="@+id/empPin"
    android:layout_width="wrap_content"
    android:layout_height="0dp"
    android:layout_alignBottom="@+id/emp_avatar"
    android:layout_alignRight="@+id/emp_number"
    android:layout_toRightOf="@+id/emp_avatar"
    android:ems="10"
    android:inputType="number" >

    <requestFocus />
</EditText>

<Button
    android:id="@+id/empAdd"
    android:layout_width="wrap_content"
    android:layout_height="0dp"
    android:layout_alignBaseline="@+id/empPin"
    android:layout_alignBottom="@+id/empPin"
    android:layout_marginLeft="20dp"
    android:layout_toRightOf="@+id/empPin"
    android:text="@string/emp_add_btn" />

Here I post the code of Activity.java.

public class MainPortal extends Activity {
private List<Employee> employees = new ArrayList<Employee>();
EditText et;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main_portal);
    populateEmployeeList();
    //populsteListView();

    ListView list = (ListView) findViewById(R.id.employeeListView);
    ArrayAdapter<Employee> adapter = new MylistAdapter();
    list = (ListView) findViewById(R.id.employeeListView);
    list.setAdapter(adapter);

     list.setOnItemClickListener(new OnItemClickListener() {
          public void onItemClick(AdapterView<?> parent, View view,
                  int position, long id) {
//I ADDED ON CLICK IMPLEMENTATION HERE, BUT THIS IS NOT WORKING
              Toast.makeText(getApplicationContext(), "CLICKED", Toast.LENGTH_SHORT).show();   
              }
            });


private void populateEmployeeList() {
      ...
}



private class MylistAdapter extends ArrayAdapter<Employee>{


    public MylistAdapter(){
        super(MainPortal.this,R.layout.item_view,employees);
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View itemView = convertView;
        if(itemView==null){
            itemView = getLayoutInflater().inflate(R.layout.item_view, parent,false);
        }
        Employee currentEmployee = employees.get(position);
        //Avatar
        ImageView imageView = (ImageView) itemView.findViewById(R.id.emp_avatar);
        imageView.setImageResource(currentEmployee.getAvatarId());
        //Employee number
        TextView emp_id = (TextView) itemView.findViewById(R.id.emp_number);
        emp_id.setText(currentEmployee.getId());

        et = (EditText) itemView.findViewById(R.id.empPin);
        return itemView;
    }
}
}

Above I have posted some codes that I think important. Can any one please help me to do this task. Thanks in advance.


回答1:


Add the following attributes to your button

  android:focusable="false"
  android:focusableInTouchMode="false"

ListView setOnItemClickListener not working by adding button

Is your edittext taking focus on click of list item? If so remove the focus on edittext also.




回答2:


Here your edittext inside the listview is having all the focus, so this listview onClick is not working. Remove the focus from the editext box and it will start working




回答3:


// try this
public class MainPortal extends Activity {
    private List<Employee> employees = new ArrayList<Employee>();
    EditText et;
    ListView list;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main_portal);
        populateEmployeeList();
        //populsteListView();

        list = (ListView) findViewById(R.id.employeeListView);
        ArrayAdapter<Employee> adapter = new MylistAdapter();
        list.setAdapter(adapter);

        list.setOnItemClickListener(new OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View view,
                                    int position, long id) {
//I ADDED ON CLICK IMPLEMENTATION HERE, BUT THIS IS NOT WORKING
                Toast.makeText(getApplicationContext(), "CLICKED", Toast.LENGTH_SHORT).show();
            }
        });
    }
}



回答4:


In my Case setOnItemClickListener works fine in Android Versions Upto 5.1.1 But Having On Android 6.0.1. At last I found the solution Try this
Remove these Lines from Your XML Layout

android:orientation="vertical"
tools:context=".ManageRequest"
android:contextClickable="true"

Works for Me in Android Version 6.0.1 Hope Your Problems Solved ..!!! Happy Coding :)



来源:https://stackoverflow.com/questions/19155109/android-list-view-setonitemclicklistener-not-working

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!