我正在使用gridview,其中每个单元格都包含图像和一行文本。我想要做的是当用户在gridview中选择该项时更改图像。当只有没有文字的图像时,我有这个工作,但在更改单元格以包括图像和文本时,我收到错误:
java.lang.ClassCastException: android.widget.LinearLayout
在我尝试获取所选项目的图像视图的行上发生错误。
ImageView ivCheck = (ImageView)parent.getChildAt(position);
根据我的理解,这是因为我目前正在做的是无法将textview与imageview分开......但是,我不确定是否有任何方法可以做到这一点。
以下代码:
grid.xml:
<?xml version="1.0" encoding="utf-8"?>
<GridView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/grid"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:padding="10dp"
android:verticalSpacing="10dp"
android:horizontalSpacing="10dp"
android:numColumns="2"
android:columnWidth="90dp"
android:stretchMode="columnWidth"
android:gravity="center" >
</GridView>
icon.xml:
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/widget44"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_x="201px"
android:layout_y="165px"
android:gravity="center_horizontal">
<ImageView
android:id="@+id/icon_image"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</ImageView>
<TextView
android:id="@+id/icon_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="TextView"
android:gravity="center_horizontal"
android:textColorHighlight="#656565">
</TextView>
</LinearLayout>
相关的java代码:
gridview.setAdapter(new ImageAdapter(this));
gridview.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
//Setting tags, and resetting after failed match
System.out.println(parent + ", " + v + ", " + position + ", " + id);
for (int i = 0; i < tiles.length; i++){
ImageView ivCheck = (ImageView)parent.getChildAt(i); //error here
我已经阅读了许多关于使用图像和文本制作网格视图的教程,但是很难找到一个带有onclicklistener的教程,这会改变所选单元格中的图像。我真的很感激任何帮助!
答案 0 :(得分:0)
只需使用View v
参数即可访问您要修改的视图。
像这样:
LinearLayout icon = (LinearLayout)v;
ImageView image = icon.findViewById(R.id.icon_image);
// do stuff with image here
请注意,如果用户滚动远离此项目,则不会保存您所做的更改!这是因为GridView因滚动而离开屏幕时会回收View
。如果您希望允许用户修改GridView
中的项目,即使它们滚动并返回时也会记住它,您需要对填充此Adapter
的{{1}}进行更改}。