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

时间:2014-07-16 03:03:50

标签: 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 个答案:

答案 0 :(得分:5)

  1. 从TextView中删除android:clickable="false"
  2. 此外,请删除android:focusable="false"
  3. 如果将这些设置为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不应该覆盖您不一定要或不确定该方法应该返回的方法,这不是一个好主意。