簡體   English   中英

ListView OnItemClickListener不適用於自定義適配器

[英]ListView OnItemClickListener won't Work with Custom Adapter

我有一個與自定義適配器一起使用的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;
    }
} 

數據項:

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;
    }

主要活動:

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

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();

            }
        });
    }
}

其余代碼與您的代碼相同。嘗試此方法。因為它對我有用

查看此屏幕截圖,

在此處輸入圖片說明

您要在onItemClick上打印日志,因此請檢查您是否在打印列表項Click上的日志。

現在正在工作。 這只是一個布局問題。 謝謝你的支持!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM