Java 使列表可点击

Java 使列表可点击,java,android,listview,onclicklistener,Java,Android,Listview,Onclicklistener,我已经尝试过使用clickable和focusable,但似乎没有任何东西允许列表项可以点击 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:l

我已经尝试过使用clickable和focusable,但似乎没有任何东西允许列表项可以点击

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.");
        }
    });
recipeListView=(ListView)findViewById(R.id.recipe\u列表);
//使viewRecipe工作
recipeListView.setOnItemClickListener(新的ListView.OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父对象、视图、整型位置、长id){
d(“MainActivity”,“ListView项已单击”);
}
});

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

 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;

}

}
导入android.content.Context;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.ArrayAdapter;
导入android.widget.TextView;
导入java.util.ArrayList;
导入de.hdodenhof.circleimageview.circleimageview;
/**
*由Zohaib Hassan于2016年11月28日创建。
*/
公共类InboxAdapter扩展了ArrayAdapter{
数组列表项;
语境;
公共InboxAdapter(上下文、int资源、ArrayList项){
超级(上下文、资源、项目);
this.context=上下文;
这个项目=项目;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
//获取此职位的数据项
InboxRow rowItem=getItem(位置);
//检查是否正在重用现有视图,否则会膨胀视图
ViewHolder ViewHolder;//存储在标记中的视图查找缓存
if(convertView==null){
viewHolder=新的viewHolder();
LayoutFlater充气机=LayoutFlater.from(上下文);
convertView=充气机。充气(R.layout.inbox\u行,空);
viewHolder.tvUserName=(TextView)convertView.findViewById(R.id.tv\u user\u name\u收件箱);
viewHolder.tvMessage=(TextView)convertView.findviewbyd(R.id.tv\u message\u收件箱);
viewHolder.tvTimeCount=(TextView)convertView.findViewById(R.id.tv\u time\u count\u收件箱);
viewHolder.userProfilePic=(CircleImageView)convertView.findViewById(R.id.inbox\u profile\u image);
convertView.setTag(viewHolder);
}否则{
viewHolder=(viewHolder)convertView.getTag();
}
/*CircleImageView IVProfile毕加索背景图像集*/
返回视图;
}
私有静态类视图持有者{
text查看tvUserName、tvMessage、tvTimeCount;
CircleImageView用户配置文件PIC;
}
}

最后一件事,请确保布局类中的“ListView”在高度和宽度方面都设置为“匹配父项”。

默认情况下,列表项是可单击的。请参阅。@commonware它不适用于我链接到的示例项目。如果示例项目在您的测试环境中工作,那么您可以确定我的项目与您的项目有什么不同。如果示例项目在您的测试环境中不起作用,则测试环境存在一些问题。