【问题标题】:How to set up onItemClickListener如何设置 onItemClickListener
【发布时间】:2019-05-16 02:36:46
【问题描述】:

我在 Android Studio 中设置了一个 Listview,但在编写 OnItemClickListner 时需要帮助。

我已经尝试了代码,但似乎不起作用。

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ListView listView = (ListView) findViewById(R.id.list_view);

        ArrayList<Object> list = new ArrayList<>();
 list.add(new LTCItem("30.06 Sign Violations","Submit A Complaint To Texas Attorney General",R.drawable.gavel));
        list.add(new LTCItem("U.S. & Texas LawShield","Legal Defense For Self Defense",R.drawable.lawshield));

        listView.setAdapter(new LTCAdapter(this, list));

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

            }
        });

    }
}

下面是我的 list_view 文件。按照建议在文件中的哪个位置阻止descendantFocusability?我把它放在listView下吗?对不起,我正在学习。

<?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:alwaysDrawnWithCache="true"
    android:background="#000000"
    android:padding="8dp">

    <ListView
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

    <ImageView
        android:id="@+id/itemListViewImgIcon"
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:contentDescription="@+id/itemListViewImgIcon"
        android:src="@mipmap/ic_launcher" />

    <TextView
        android:id="@+id/itemListViewTxtTopicName"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"

    <TextView
        android:id="@+id/itemListViewTxtTopicSubtitle"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/itemListViewTxtTopicName"

</RelativeLayout>

好的,我添加了作为 Java 类项的适配器代码。我在哪里添加代码?

public class LTCAdapter extends BaseAdapter {
    ArrayList<Object> list;
    private static final int LTC_Item = 0;
    private static final int HEADER = 1;
    private LayoutInflater inflater;


    public LTCAdapter(Context context, ArrayList<Object> list) {
        this.list = list;
        inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }

    @Override
    public int getItemViewType(int position) {
        if (list.get(position) instanceof LTCItem) {
            return LTC_Item;
        } else {
            return HEADER;
        }
    }

    @Override
    public int getViewTypeCount() {
        return 2;
    }

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

    @Override
    public Object getItem(int i) {
        return list.get(i);
    }

    @Override
    public long getItemId(int i) {
        return 1;
    }

    @Override
    public View getView(int i, View view, ViewGroup viewGroup) {
        if (view == null) {
            switch (getItemViewType(i)) {
                case LTC_Item:
                    view = inflater.inflate(R.layout.item_list_view, null);
                    break;
                case HEADER:
                    view = inflater.inflate(R.layout.item_listview_header, null);
                    break;
            }
        }

        switch (getItemViewType(i)) {
            case LTC_Item:
                ImageView image = (ImageView) view.findViewById(R.id.itemListViewImgIcon);
                TextView name = (TextView) view.findViewById(R.id.itemListViewTxtTopicName);
                TextView subtitle = (TextView) view.findViewById(R.id.itemListViewTxtTopicSubtitle);

                image.setImageResource(((LTCItem) list.get(i)).getImage());
                name.setText(((LTCItem) list.get(i)).getName());
                subtitle.setText(((LTCItem) list.get(i)).getSubtitle());
                break;
            case HEADER:
                TextView title = (TextView) view.findViewById(R.id.itemListViewHeader);
                title.setText(((String) list.get(i)));
                break;
        }
        return view;
    }
}

【问题讨论】:

  • 也许你可以查看这个关于listview点击问题link的问题,你也可以使用RecyclerView来代替
  • @blaw 你可以简单地把 listView.setDescendantFocusability(ListView.FOCUS_BLOCK_DESCENDANTS);而且最好使用 recyclerView 而不是 listView
  • 你没有在onItemClick中添加任何代码。
  • 正如上面提到的@JohnJoe,什么都不会发生,因为您没有在onItemClick 中处理点击事件。
  • 您应该为您的活动和您的适配器列表项使用不同的布局。根据您的代码,您似乎同时使用了ListView 和项目。请检查这可能会有所帮助:stackoverflow.com/questions/55878139/…

标签: java android android-listview android-listadapter


【解决方案1】:

您的ListView 元素没有ID,您应该在XML 文件中添加android:id="@+id/list_view"

这是一个例子:

<ListView
        android:id="@+id/list_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

【讨论】:

    【解决方案2】:

    由于您的列表视图包含可聚焦元素,您需要在列表视图项 xml 文件的父布局中编写这段代码

    android:descendantFocusability="blocksDescendants"
    

    【讨论】:

    • 我添加了我的视图项 xml 文件。我在哪里写这段代码?谢谢
    • 我希望您更新与 LTCAdapter 关联的 xml 文件中的一段代码。不是活动 xml 文件。
    • 我添加了java类适配器文件。我在哪里添加代码?还是你的意思是activity_main?
    • 我在寻找 LTCAdapter.java 而不是 LTCItem.java 而 LTCItem 是 pojo 类而不是 Adapter。
    • 我刚刚添加了适配器文件。我将在哪里添加代码?谢谢
    猜你喜欢
    • 1970-01-01
    • 2017-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-27
    • 2021-01-26
    • 1970-01-01
    相关资源
    最近更新 更多