我有一个由LinearLayout和其中的一些元素组成的ListView。它由一个扩展ArrayAdapter>的自定义适配器驱动。出于某种原因,当我点击显示的项目时,它不会被调用。在logcat中没有任何事情发生。没有错误,没有记录,没有。
我已经阅读了许多类似的问题,并试图实施解决方案,但这似乎不是我的问题。我尝试了onItemClickListener not firing on custom ArrayAdapter和Listview 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;
}
什么都没发生。就像我说的,没有日志或事件或错误。我做错了什么?
答案 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"