我已经实施了ArrayAdapter
来自定义GridView
。每个项目的布局都在xml代码中定义,产生类似这样的内容:
在我的活动中,我实现了以下代码:
GridView gridview = (GridView) findViewById(R.id.gridview);
adapter = new myArrayAdapter(this, articlesList);
gridview.setAdapter(new myArrayAdapter(this, articlesList));
gridview.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
// here I want to change the text of the `TextView` in the right bottom corner to "CLICKED"
}
});
正如代码的注释部分所解释的那样,我只想更新右下角的TextView,在其中写下“CLICKED”文本。
答案 0 :(得分:1)
View
AdapterView.OnItemClickListener
的{{1}}参数是点击的视图。在您的情况下,它将是项目根onItemClick()
。在其上调用RelativeLayout
或使用ViewHolder模式获取对您要更新的findViewById()
的引用,并进行更新。
另请注意,当视图被回收时,即使用非空TextView
调用适配器的getView()
时,您需要将convertView
重置为其默认状态。
答案 1 :(得分:0)
您可能不需要将TextView设置为“Clicked”,如果您要做的就是向用户提供他们已检查过项目的反馈。另一种方法可能是执行以下操作。请注意,如果您仍需要,此方法还可以帮助您将文本视图设置为“单击”。
要检查某个项目,我会按如下方式扩展您的RelativeLayout
:
public class CheckableRelativeLayout extends RelativeLayout implements Checkable {
private boolean mChecked;
private static final int[] CHECKED_STATE_SET = {
android.R.attr.state_checked
};
public CheckableRelativeLayout(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
protected int[] onCreateDrawableState(int extraSpace) {
final int[] drawableState = super.onCreateDrawableState(extraSpace + 1);
if (isChecked()) {
mergeDrawableStates(drawableState, CHECKED_STATE_SET);
}
return drawableState;
}
public void toggle() {
setChecked(!mChecked);
}
public boolean isChecked() {
return mChecked;
}
public void setChecked(boolean checked) {
if (mChecked != checked) {
mChecked = checked;
refreshDrawableState();
}
}
}
然后,您可以在parent.setItemChecked(position,true);
中致电onItemClick
,AdapterView
实际上会在RelativeLayout
内设置项目。
执行此操作后,您可以在扩展gridview.getCheckedItemPosition()
上设置背景选择器,这些项目将执行选定,按下,检查等操作。但是,您不需要使用背景选择器。
还有更多内容,您可以随时查看是否使用gridview.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
parent.setItemChecked(position,true);
yourAdapter.ViewHolder vh = (yourAdapter.ViewHolder) v.getTag();
vh.textView.setText("Clicked");
}
});
查看了视图,如果您想将textview实际设置为“Clicked”,则可能会觉得有用。
holder.extendedrelativeLayout.isChecked()
在您的适配器中,您可以在静态ViewHolder类中保存对扩展相对布局的引用,如果选中(例如{{1}}),请确保将textView设置为“Clicked”。
答案 2 :(得分:0)
尝试gridView.invalidateViews();
它会自动调用适配器的getView()方法并更新视图。