ListView OnItemClickListener无法使用自定义适配器

时间:2017-01-01 22:41:39

标签: java android listview

我有一个ListView,我使用自定义适配器和OnItemClickListener方法无法工作。

我尝试在StackOverFlow上搜索,但似乎没有任何答案可行。

这是我的代码:

row.xml:

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


    <TextView
        android:id="@+id/name"
        android:layout_height="wrap_content"
        android:textSize="18sp"
        android:layout_gravity="left|center_vertical"
        android:layout_marginLeft="10sp"
        android:layout_width="150sp"
        android:clickable="false"
        android:focusable="false"
        android:focusableInTouchMode="false"
        android:layout_marginRight="15sp" />

    <TextView
        android:id="@+id/record"
        android:layout_height="wrap_content"
        android:layout_marginLeft="15sp"
        android:layout_gravity="right"
        android:textSize="18sp"
        android:clickable="false"
        android:focusable="false"
        android:focusableInTouchMode="false"
        android:layout_width="150sp" />

</LinearLayout>

CustomAdapter:

package com.stackoverflow;

import java.util.ArrayList;

import android.content.Context;
import android.graphics.Color;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;

public class CustomAdapter extends ArrayAdapter<DataItem> {
    private ArrayList<DataItem> objects;

    public CustomAdapter(Context context, int textViewResourceId, ArrayList<DataItem>     objects) {
        super(context, textViewResourceId, objects);
        this.objects = objects;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        View v = convertView;
        if (v == null) {
            LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            v = inflater.inflate(R.layout.row, null);
        }


        DataItem i = objects.get(position);

        if (i != null) {
            TextView nameView = (TextView) v.findViewById(R.id.name);
            TextView recordView = (TextView) v.findViewById(R.id.record);

            if (nameView != null){
                nameView.setText(i.getname());
                nameView.setTextSize(18);
                nameView.setTextColor(Color.WHITE);
            }
            if (recordView != null){
                recordView.setText(i.getrecord());
                recordView.setTextSize(18);
                recordView.setTextColor(Color.WHITE);
            }

        }

        return v;
    }
} 

的DataItem:

public class DataItem {
    private String name;
    private String record;

    public DataItem() {

    }

    public DataItem(String n, String r) {
        this.name = n;
        this.record = r;
    }

    public String getname() {
        return name;
    }

    public void setname(String name) {
        this.name = name;
    }

    public String getrecord() {
        return record;
    }

    public void setrecord(String record) {
        this.record = record;
    }

MainActivity:

listView = (ListView) findViewById(R.id.listView);
        DataItem obj1 = new DataItem("Example 1", "$12");
        DataItem obj2 = new DataItem("Example 2", "$23");
        data.add(obj1);
        data.add(obj2);
        CustomAdapter adapter = new CustomAdapter(this, R.layout.row, data);
        listView.setAdapter(adapter);


        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {

                Log.i("App Info: ", "Clicked!");

            }
        });

基本上,这里的问题是我无法使onItemClickListener工作;当我单击listView中的项目时,没有任何反应。有人能帮助我吗?

谢谢, KPS

3 个答案:

答案 0 :(得分:0)

MainActivity.java:

public class MainActivity extends AppCompatActivity {

    ListView listView;
    ArrayList<DataItem> data;

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

        listView = (ListView) findViewById(R.id.listView);
        data = new ArrayList<>();
        DataItem obj1 = new DataItem("Example 1", "$12");
        DataItem obj2 = new DataItem("Example 2", "$23");
        data.add(obj1);
        data.add(obj2);
        CustomAdapter adapter = new CustomAdapter(this, R.layout.row, data);
        listView.setAdapter(adapter);


        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {

                Log.i("App Info: ", "Clicked!");
                Toast.makeText(MainActivity.this, "Clicked"+i, Toast.LENGTH_SHORT).show();

            }
        });
    }
}

剩余代码与您的代码相同。试试这个......因为它对我有用

答案 1 :(得分:0)

见此截图

enter image description here

您正在打印onItemClick的日志,因此请检查您是否在列表项目上打印日志是否单击。

答案 2 :(得分:0)

现在正在运作。这只是一个布局问题。感谢您的支持!

相关问题