【问题标题】:Make list clickable使列表可点击
【发布时间】:2017-05-07 20:31:44
【问题描述】:

我已经尝试过使用可点击和可聚焦,但似乎没有任何东西可以让列表项成为可点击的。

xml文件

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

<Button
    android:id="@+id/add_recipe_button"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="@string/recipe_activity_add"
    android:background="@color/colorPrimary"
    android:textColor="#fff"/>

<ListView
    android:id="@+id/recipe_list"
    android:layout_width="match_parent"
    android:focusable="false"
    android:clickable="true"
    android:layout_height="match_parent" />

java代码

recipeListView = (ListView)findViewById(R.id.recipe_list);


    //make viewRecipe Work
    recipeListView.setOnItemClickListener(new ListView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            Log.d("MainActivity", "ListView item clicked.");
        }
    });

【问题讨论】:

  • 列表项默认是可点击的。见this sample app
  • @CommonsWare 不适合我
  • 试试我链接的示例项目。如果示例项目在您的测试环境中工作,那么您可以确定我的项目与您的项目相比有何不同。如果示例项目在您的测试环境中不起作用,则说明测试环境存在问题。

标签: java android listview onclicklistener


【解决方案1】:

当您在 Listview 行的子项上设置 onClickListner 时尝试在 Listview 项上设置 OnItemClickListner 时,Android 有时会显示奇怪的行为。试着检查你的“适配器”类,并确保一切都很好,并且按照标准得到了很好的管理。使用 ViewHolder 访问 Adapter 类中的子项。 这是适配器的示例类。使用这个,希望它会工作。

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



import java.util.ArrayList;

import de.hdodenhof.circleimageview.CircleImageView;

 /**
 * Created by Zohaib Hassan on 11/28/2016.
 */

 public class InboxAdapter extends ArrayAdapter<InboxRow> {

ArrayList<InboxRow> items;
Context context;


public InboxAdapter(Context context, int resource, ArrayList<InboxRow> items) {
    super(context , resource , items);
    this.context = context;
    this.items = items;

}



@Override

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

    // Get the data item for this position

    InboxRow rowItem = getItem(position);

    // Check if an existing view is being reused, otherwise inflate the view

    ViewHolder viewHolder; // view lookup cache stored in tag

    if (convertView == null) {

        viewHolder = new ViewHolder();

        LayoutInflater inflater = LayoutInflater.from(context);

        convertView = inflater.inflate(R.layout.inbox_row, null);

        viewHolder.tvUserName = (TextView) convertView.findViewById(R.id.tv_user_name_inbox);
        viewHolder.tvMessage = (TextView) convertView.findViewById(R.id.tv_message_inbox);
        viewHolder.tvTimeCount = (TextView) convertView.findViewById(R.id.tv_time_count_inbox);
        viewHolder.userProfilePic = (CircleImageView) convertView.findViewById(R.id.inbox_profile_image);

        convertView.setTag(viewHolder);

    } else {

        viewHolder = (ViewHolder) convertView.getTag();

    }


    /*CircleImageView ivProfileImage Set Background with Picasso*/

    return convertView;

}

private static class ViewHolder {

    TextView tvUserName , tvMessage , tvTimeCount;
    CircleImageView userProfilePic;

}

}

最后一件事,请确保布局类中的“ListView”在高度和宽度上都设置为“match-parent”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-30
    • 1970-01-01
    • 2021-07-02
    • 1970-01-01
    • 2016-08-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多