【发布时间】:2017-07-09 17:28:34
【问题描述】:
我正在尝试创建一个包含一些按钮的 GridView。按钮正在填充,但在单击 GridView 内的按钮时未调用 OnItemClickListener()。
活动类代码
gridView = (GridView) findViewById(R.id.gridview);
gridView.setAdapter(new ButtonAdapter(getApplicationContext(),answer));
gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View v,
int position, long id) {
flipper.showNext();
}
});
自定义按钮适配器
public class ButtonAdapter extends BaseAdapter{
private Context context;
private int[] numbers = new int[100];
private String[] answer;
public ButtonAdapter (Context context,String[] answer){
this.context = context;
this.answer = answer;
for(int i=0;i<100;i++){
numbers[i] = i+1;
}
}
@Override
public int getCount() {
return numbers.length;
}
@Override
public Object getItem(int i) {
return null;
}
@Override
public long getItemId(int i) {
return 0;
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
View gridView;
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
if(view == null) {
gridView = new View(context);
gridView = inflater.inflate(R.layout.adapter, null);
} else {
gridView = (View) view;
}
Button button = (Button) gridView.findViewById(R.id.adapter_button);
button.setText(numbers[i]+"");
if(answer[i].equals("null"))
button.setBackgroundColor(context.getResources().getColor(R.color.reset));
else
button.setBackgroundColor(context.getResources().getColor(R.color.optionCheck));
return gridView;
}
}
adapter.xml
<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/adapter_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button" />
</LinearLayout>
acitvity_layout.xml
<GridView
android:id="@+id/gridview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center"
android:numColumns="5"
android:columnWidth="50dp"
android:stretchMode="columnWidth"
android:layout_below="@+id/back"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />
【问题讨论】:
-
你挂在 gridView 的 setOnItemClickListener 上,应该是按钮的 setOnItemClickListener?
-
我正在关注 android 文档 (developer.android.com/guide/topics/ui/layout/gridview.html)。这里 setOnItemClickListener 设置在 gridview 上,而不是里面的元素。
-
@JeffUK 他的按钮位于由adapter.xml 填充的gridview 中。我对他的 getView 实现持怀疑态度,他在其中创建了一个新视图并返回它。为什么不返回他在参数中传递的相同视图!
-
尝试实现 onItemClickListener 并在重写的函数中实现 onItemClick。你也确定你的 Flipper.showNext() 方法吗?
-
是的,flipper.showNext() 方法很好。早些时候,我只使用 textviews 填充了 gridview,而不使用自定义适配器。那时对单个元素的点击是有效的。
标签: java android gridview android-arrayadapter