我有显示一些TextView
个GridView
,视图画出以便ONE作为选择标记。问题是,当用户交互我的逻辑改变所选择的项目我想更新的意见参与,即视图显示先前选定的项目和显示当前选择的项目的看法。 (当然,在我真正的问题中,网格中的子视图更复杂,更新过程可能涉及一些计算,加载资源,访问数据库等)。如何刷新GridView中的子视图?
直到现在,我正在使用BaseAdapter.notifyDataSetChanged
或GridView.invalidateViews
和都做的工作,但也更新所有GridView
的可见子视图,但我想要更新只是TWO其中意见。
我该怎么做?如何获得更新过程的两个视图?
注:我现在面临这个问题,ListView
S还,但我觉得可能会有相同的解决方案。
示例代码:
public class MainActivity extends Activity {
private int selectedPos = 36;
private class MyAdapter extends BaseAdapter {
@Override
public int getCount() {
return 100;
}
@Override
public Object getItem(int position) {
return position;
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
TextView tv;
if(convertView==null) {
tv = new TextView(MainActivity.this);
} else {
tv = (TextView) convertView;
}
Log.d("Updating -----", String.valueOf(position));
if(position==selectedPos)
tv.setText("Item ".toUpperCase() + String.valueOf(position));
else
tv.setText("Item " + String.valueOf(position));
return tv;
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final GridView gv = (GridView) findViewById(R.id.gridView1);
gv.setAdapter(new MyAdapter());
gv.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
selectedPos = position;
//gv.invalidateViews();
((MyAdapter)gv.getAdapter()).notifyDataSetChanged();
}
});
}
}
我正在寻找的是类似(某种伪代码):
updateThisViewAsNotSelected(selectedPos);
gv.redrawThisView(selectedPos);
selectedPos = position;
updateThisViewAsSelected(selectedPos);
gv.redrawThisView(selectedPos);
还是这个问题,我想只是更新两个视图,不是全部,如果没有简单的方法,我可以没有它然后生活。避免我在更新过程中做的事情,这只是一个例子。关键是为什么更新所有可见的视图,如果我只关心TWO。 –
你怎么知道他们正在更新?你能看到不改变文本的视图有什么不同吗?如果不是那么你为什么在意?也许Android足够智能,不会更新屏幕上的像素,如果他们没有改变。 – doorstuck
首先,我需要更新先前选择的项目的视图,然后是新选择的项目的视图,我知道我只需要视图的项目的位置或使用像'GridView.recreateThisView(int)' –