Java Android:为什么使用ArrayAdapter的我的ListView的onItemClick不起作用?

Java Android:为什么使用ArrayAdapter的我的ListView的onItemClick不起作用?,java,android,listview,android-arrayadapter,onitemclicklistener,Java,Android,Listview,Android Arrayadapter,Onitemclicklistener,我有一个列表视图,由线性布局和其中的一些元素组成。它由扩展ArrayAdapter>的自定义适配器驱动。由于某些原因,当我单击显示的项目时,它不会被调用。logcat中没有发生任何事情。没有错误,没有日志,什么都没有 我读过许多类似的问题,并试图实施解决方案,但这似乎不是我的问题。我试了又试 以下是我的活动代码: ratingAdapter = new RatingAdapter(this, RatingRecord); ratingListView = (ListView) f

我有一个列表视图,由线性布局和其中的一些元素组成。它由扩展ArrayAdapter>的自定义适配器驱动。由于某些原因,当我单击显示的项目时,它不会被调用。logcat中没有发生任何事情。没有错误,没有日志,什么都没有

我读过许多类似的问题,并试图实施解决方案,但这似乎不是我的问题。我试了又试

以下是我的活动代码:

    ratingAdapter = new RatingAdapter(this, RatingRecord);
    ratingListView = (ListView) findViewById(R.id.ratingsListView);
    ratingListView.setAdapter(ratingAdapter);
    ratingListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
            Log.d("Ratings update", "Clicked button for " + RatingRecord.get(i).get(1));
            RateRestaurant(RatingRecord.get(i));
        }
    });
ratingAdapter=新的ratingAdapter(此,RatingRecord);
ratingListView=(ListView)findViewById(R.id.ratingsListView);
ratingListView.setAdapter(ratingAdapter);
ratingListView.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
公共无效onItemClick(AdapterView AdapterView、View视图、int i、long l){
Log.d(“评级更新”,“点击“+RatingRecord.get(i).get(1)”按钮);
评级餐厅(评级记录.get(i));
}
});
以下是我的项目xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="50dp"
    android:orientation="horizontal"
    android:clickable="true"
    android:id="@+id/ratings_row"
    style="@android:style/Widget.Button"
    android:descendantFocusability="blocksDescendants"
    android:focusable="true">

        <TextView
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:textSize="16sp"
            android:layout_weight="2"
            android:id="@+id/rating_name"
            android:focusable="false"/>
        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="left"
            android:adjustViewBounds="true"
            android:paddingRight="5dp"
            android:id="@+id/rating_icon"
            android:focusable="false"/>
        <TextView
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:textSize="16sp"
            android:layout_weight="1"
            android:id="@+id/rating_date"
            android:gravity="center_horizontal"
            android:focusable="false"/>

</LinearLayout>

以下是主活动的ListView布局:

    <ListView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:paddingTop="10dp"
        android:paddingBottom="10dp"
        android:id="@+id/ratingsListView"/>

以下是适配器比率适配器的要点:

public RatingAdapter(Context context, ArrayList<ArrayList<String>> inValues) {
    super(context, R.layout.ratings_row, inValues);
    this.context = context;
    ratingList = CsvUtil.fromCsvTable(context.getString(R.string.Ratings_OptionsList));
}
    private ViewHolder(View c, Integer n, Integer i, Integer d) {
        NameView = (TextView)c.findViewById(n);
        IconView = (ImageView)c.findViewById(i);
        DateView = (TextView)c.findViewById(d);
    }
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    // Get the data item for this position
    ArrayList<String> record = getItem(position);
    // Check if an existing view is being reused, otherwise inflate the view
    ViewHolder vh;
    if (convertView == null) {
        convertView = LayoutInflater.from(getContext()).inflate(R.layout.ratings_row, parent, false);
        vh = new ViewHolder(convertView,R.id.rating_name,R.id.rating_icon,R.id.rating_date);
        convertView.setTag(vh);
    } else {
        vh = (ViewHolder)convertView.getTag();
    }

    // Lots of data calculation and populating ViewHolder elements

    return convertView;
}
public RatingAdapter(上下文、数组列表无效){
超级(上下文、右布局、等级、无效);
this.context=上下文;
ratingList=CsvUtil.fromCsvTable(context.getString(R.string.Ratings_optionList));
}
私有视图持有者(视图c、整数n、整数i、整数d){
NameView=(TextView)c.findviewbyd(n);
IconView=(ImageView)c.findviewbyd(i);
DateView=(TextView)c.findViewById(d);
}
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
//获取此职位的数据项
ArrayList记录=getItem(位置);
//检查是否正在重用现有视图,否则会膨胀视图
视窗座;
if(convertView==null){
convertView=LayoutInflater.from(getContext()).flate(R.layout.ratings_行,父级,false);
vh=新的视窗支架(convertView,R.id.rating_名称,R.id.rating_图标,R.id.rating_日期);
convertView.setTag(vh);
}否则{
vh=(ViewHolder)convertView.getTag();
}
//大量数据计算和填充ViewHolder元素
返回视图;
}

什么也没发生。就像我说的,没有日志、事件或错误。我做错了什么?

在adapter getView()方法中单击convertview设置

在评论中提供的答案

“请尝试从列表项布局中删除此行style=“@android:style/Widget.Button”

虽然ListView已经提供了点击功能,但我还是使用了style小部件.Button给我一个按钮的外观。然而,这种风格不仅仅改变了外观。它还覆盖了单击功能。为了在没有副作用的情况下获得我想要的效果,我只需使用以下设置背景:

android:background="@android:drawable/btn_default"

您能否在主活动中发布ratingsListView的布局?您的listview是否已填充数据?ratingsListView已发布。是,我的listview中有一个或多个项目,单击时它们没有响应。请尝试删除此行style=“@android:style/Widget.Button”从您列出项目布局并让我知道?您能完整发布主活动布局吗?适配器无法访问从主活动在侦听器中调用的方法或字段。我该怎么做?
android:background="@android:drawable/btn_default"