Android onItemClickListener 不起作用(代码中没有焦点)

标签 android onitemclicklistener

在过去的几个小时里,这一直让我发疯……我觉得这是显而易见的事情……

我已将我的代码简化为一个简单的 ListView,其中包含一个 TextView,但似乎仍然无法使其正常工作(我在控制台中没有看到 toast 或日志消息)。

非常感谢任何帮助! :)

MainActivity.java

public class MainActivity extends ActionBarActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        SparseArray<Data> data = createData();
        ListView listView = (ListView) findViewById(R.id.listView);
        final CustomListAdapter adapter = new CustomListAdapter(this, data);

        listView.setAdapter(adapter);

        listView.setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView parent, View view, int position, long id) {
                Log.v("onItemClick", "Clicked");
                Toast.makeText(getApplicationContext(), "Clicked", Toast.LENGTH_SHORT).show();
            }
        });
    }
}

CustomListAdapter.java

public class CustomListAdapter extends BaseAdapter {
    private final SparseArray<Data> data;
    private LayoutInflater inflater;
    private final Activity activity;

    public CustomListAdapter(Activity activity, SparseArray<Data> data) {
        this.activity = activity;
        this.data = data;
        this.inflater = activity.getLayoutInflater();
    }

    @Override
    public int getCount() {
        return data.size();
    }

    @Override
    public Object getItem(int position) {
        Log.v("getItem", "" + position);
        return data.get(position);
    }

    @Override
    public long getItemId(int position) {
        return 0;
    }

    @Override
    public int getItemViewType(int position) {
        //TODO: Implement Image vs no image views
        return 0;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parentView) {
        if(convertView == null) {
            convertView = inflater.inflate(R.layout.data, null);
        }

        Data data = (Data) getItem(position);

        ((TextView) convertView.findViewById(R.id.dataTitle)).setText(data.getTitle());

        return convertView;
    }

    @Override
    public int getViewTypeCount() {
        // TODO Auto-generated method stub
        return 1;
    }

    @Override
    public boolean isEmpty() {
        // TODO Auto-generated method stub
        return false;
    }

    @Override
    public boolean areAllItemsEnabled() {
        // TODO Auto-generated method stub
        return false;
    }

    @Override
    public boolean isEnabled(int arg0) {
        // TODO Auto-generated method stub
        return false;
    }

    @Override
    public boolean hasStableIds() {
        // TODO Auto-generated method stub
        return false;
    }
}

activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/LinearLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="0dp"
    android:paddingLeft="0dp"
    android:paddingRight="0dp"
    android:paddingTop="0dp"
    android:background="@color/background" >

    <ListView
        android:id="@+id/listView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@color/background" />

</LinearLayout>

data.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:paddingLeft="8dp"
    android:paddingRight="8dp"
    android:paddingTop="8dp"
    android:paddingBottom="8dp" >

    <TextView 
        android:id="@+id/dataTitle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:focusable="false"
        android:clickable="false"
        android:paddingLeft="0dp"
        android:paddingBottom="8dp"
        android:textSize="26sp"
        android:textColor="@color/dataTitle" />

</LinearLayout>

注意:我确实看到触摸甚至至少被设备注册了:

07-15 22:00:50.734: I/InputReader(804): Touch event's action is 0x0 (deviceType=0) [pCnt=1, s=0.23535 ] when=378716384422000
07-15 22:00:50.734: I/InputDispatcher(804): Delivering touch to: action: 0x4
07-15 22:00:50.734: I/InputDispatcher(804): Delivering touch to: action: 0x0

最佳答案

  1. 从 TextView 中移除 android:clickable="false"
  2. 另外,删除 android:focusable="false"

如果将这些设置为 false,则无法捕获点击。

其次,

@Override
public boolean areAllItemsEnabled() {
    // TODO Auto-generated method stub
    return false;
}

@Override
public boolean isEnabled(int arg0) {
    // TODO Auto-generated method stub
    return false;
}

在这些方法中返回 true。如果每个项目都返回 false,您将无法获得点击。

IMO 覆盖您不一定必须或不确定该方法应返回什么的方法不是一个好主意。

关于Android onItemClickListener 不起作用(代码中没有焦点),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24771550/

相关文章:

java - 进入设置后返回主 Activity

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

java - 在Android中将base64字符串解码为位图

android - 我收到弃用警告

java - ListView 中特定项目的 OnClick

java - 如何实现setOnItemClickListener?

java - onItemClick 监听器的问题

java - ViewRootImpl : ViewPostImeInputStage processPointer 0 on OnItemClick of Listview in android

android - 用于在 Android 应用程序中显示图片 [不是图标] 的 PNG 与 JPG

android - 在 Network Change Android 上重启服务