【发布时间】:2016-10-07 06:55:12
【问题描述】:
我在我的 Activity 中使用带有扩展 BaseAdapter 类的自定义适配器的 Gridview。
一切正常,我们在设置值时得到了想要的结果。但是当我们单击 gridview 的特定单元格并且我想更改该单元格中按钮的颜色时,问题就来了。OnClickListner 我们改变了按钮的颜色,如下所示:
gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
Toast.makeText(BookingActivity.this, "Hi click working" + position, Toast.LENGTH_SHORT).show();
try {
Button button = (Button) view.findViewById(R.id.button3);
button.setBackgroundColor(Color.GREEN);
} catch (Exception e) {
e.printStackTrace();
}
}
});
然后按钮的颜色已更改,但是当我们向上滚动网格视图时,颜色会在另一个单元格中重复。我不希望这种颜色进一步重复。 也许单元格被重用了,但是如何避免这种类型的重复。
这是我的适配器类
public class CustomGrid extends BaseAdapter {
private Context mContext;
private final ArrayList<String> web;
public CustomGrid(Context c,ArrayList<String> web) {
mContext = c;
this.web = web;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return web.size();
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return web.get(position);
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
View grid = convertView;
CoachHolder holder = null;
LayoutInflater inflater = (LayoutInflater) mContext
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
if (grid == null) {
grid = inflater.inflate(R.layout.grid_single,parent,false);
holder = new CoachHolder(grid);
grid.setTag(holder);
} else {
holder =(CoachHolder)grid.getTag();
}
holder.button.setText(web.get(position));
return grid;
}
static class CoachHolder {
Button button;
//TextView descriptions;
public CoachHolder(View v) {
button = (Button)v.findViewById(R.id.button3);
}
}
}
这是我的 grid_item.xml 文件:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@android:color/white">
<Button
android:layout_width="150dp"
android:layout_height="100dp"
android:text="New Button"
android:id="@+id/button3"
android:clickable="false"
android:focusable="false"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true" />
</RelativeLayout>
我想要多个单元格选择,当我单击单元格时,特定单元格颜色改变但不重复。 我想我无法使用位置获取特定的单元格按钮。
请帮助我摆脱这个问题,它已经花费了太多时间。 提前感谢您的帮助
【问题讨论】:
-
您应该保存您单击的按钮的位置,然后在您滚动时再次加载它。看看stackoverflow.com/a/37041096/5381331。它是关于 CheckBox 的,但想法是一样的
标签: android gridview android-adapter android-gridview onitemclicklistener