Android:为什么onItemClick for我的ListView使用ArrayAdapter无法正常工作?

时间:2014-08-08 04:19:42

标签: java android listview android-arrayadapter onitemclicklistener

我有一个由LinearLayout和其中的一些元素组成的ListView。它由一个扩展ArrayAdapter>的自定义适配器驱动。出于某种原因,当我点击显示的项目时,它不会被调用。在logcat中没有任何事情发生。没有错误,没有记录,没有。

我已经阅读了许多类似的问题,并试图实施解决方案,但这似乎不是我的问题。我尝试了onItemClickListener not firing on custom ArrayAdapterListview onitemclick listener is not working以及OnItemClick not responding to clicks

这是我的活动代码:

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

这是我的项目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"/>

以下是适配器RatingAdapter的内容:

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

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

2 个答案:

答案 0 :(得分:0)

在适配器getView()方法中单击转换视图。

convertView.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View v) {
        Log.d("Ratings update", "Clicked button for " + RatingRecord.get(i).get(1));
        RateRestaurant(RatingRecord.get(i));       
    }
}

答案 1 :(得分:0)

Haresh在评论中提供的答案。

  

&#34;请尝试删除此行样式=&#34; @android:style / Widget.Button&#34;从您的列表项布局&#34;

我使用样式Widget.Button给我一个按钮的外观,虽然ListView已经提供了点击功能。然而,风格不仅仅改变了外观。它覆盖了点击功能。为了获得我想要的效果而没有副作用,我只是使用:

设置背景
android:background="@android:drawable/btn_default"