【发布时间】:2013-11-08 13:46:00
【问题描述】:
当我在 GridView 的布局中选择项目时,如何更改图像的颜色(不是背景!)?我重载了onItemClick()方法,但不太清楚如何引用地址具体元素(选择的那个)。
您现有的代码,row.xml:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="5dp" >
<ImageView
android:id="@+id/rowImage"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="10dp"
android:src="@drawable/ic_launcher" >
</ImageView>
<TextView
android:id="@+id/rowText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginTop="5dp"
android:textSize="15sp"
android:textStyle="bold" >
</TextView>
</LinearLayout>
activity_main.xml:
<?xml version="1.0" encoding="utf-8"?>
<GridView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/gridView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:columnWidth="150dp"
android:gravity="center"
android:numColumns="auto_fit"
android:stretchMode="columnWidth" >
</GridView>
ImageAdapter.class:
package com.example.exchangemanager;
import java.util.ArrayList;
import android.app.Activity;
import android.content.Context;
import android.graphics.Color;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;
public class ImageAdapter extends ArrayAdapter<Item> {
Context context;
int layoutResourceId;
ArrayList<Item> data = new ArrayList<Item>();
public ImageAdapter(Context context, int layoutResourceId,
ArrayList<Item> data) {
super(context, layoutResourceId, data);
this.context = context;
this.layoutResourceId = layoutResourceId;
this.data = data;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View row = convertView;
RecordHolder holder = null;
if (row == null) {
LayoutInflater inflater = ((Activity) context).getLayoutInflater();
row = inflater.inflate(layoutResourceId, parent, false);
holder = new RecordHolder();
holder.textView = (TextView) row.findViewById(R.id.rowText);
holder.imageView = (ImageView) row.findViewById(R.id.rowImage);
row.setTag(holder);
} else {
holder = (RecordHolder) row.getTag();
}
Item item = data.get(position);
holder.textView.setText(item.getTitle());
holder.imageView.setImageBitmap(item.getImage());
// My previous attempts
holder.imageView.setColorFilter(Color.GRAY);
return row;
}
static class RecordHolder {
TextView textView;
ImageView imageView;
}
}
MainActivity.class,重载onItemClick()方法:
gridView.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View v,
int position, long id) {
}
});
正如您在文件 ImageAdapter.class 中看到的那样,我可以在颜色上绘制图像,但在选择时我无法将颜色改回。
【问题讨论】:
-
我已经编辑了我的答案,我认为这应该可行。最好你检查一下。
-
我很抱歉我是一个“恶意”,但不幸的是它不起作用。我的意思是它确实是什么,但是当我重写你的代码时,它可以工作,但我点击哪一行并不重要,并且总是只选择第一行。我试图检索X和Y的位置,然后将它们转换为位置行,但是应用程序被踢除了“java空指针异常”。
-
我已经更新了我的答案(再次)兄弟..这一次,我认为它应该按预期工作。看看吧。。
-
是的,它成功了!感谢您的帮助和时间
标签: android gridview onitemclick