如果您对java-`notifyDataSetChanged`我缺少什么?感兴趣,那么本文将是一篇不错的选择,我们将为您详在本文中,您将会了解到关于java-`notifyDataSetChanged
如果您对java-`notifyDataSetChanged`我缺少什么?感兴趣,那么本文将是一篇不错的选择,我们将为您详在本文中,您将会了解到关于java-`notifyDataSetChanged`我缺少什么?的详细内容,我们还将为您解答notifydatasetchanged()的相关问题,并且为您提供关于android adapter notifydatasetchanged时,如何不上焦点、Android adapter.notifyDataSetChanged()不工作?、Android notifyDataSetChanged、Android notifyDataSetChanged无法正常工作的有价值信息。
本文目录一览:- java-`notifyDataSetChanged`我缺少什么?(notifydatasetchanged())
- android adapter notifydatasetchanged时,如何不上焦点
- Android adapter.notifyDataSetChanged()不工作?
- Android notifyDataSetChanged
- Android notifyDataSetChanged无法正常工作
java-`notifyDataSetChanged`我缺少什么?(notifydatasetchanged())
我有一个活动,在视图上绘制了一些图标.
它在onCreate()中设置一个list和listadapter.
我已将分配列表给我的适配器的代码提取到公共方法.
这样,外部代码就可以调用UI线程并为适配器分配新列表,并使其通过notifyDataSetChange()通知更改.
但是,不会绘制新图标,而是仅在离开并返回到活动之后绘制.
我怎样才能解决这个问题?
我试过adapter.clear()
并仔细检查了UI线程是否在运行此代码.
还有什么?
public class CategoriesActivity extends ActivityBase {
private Category[] categories;
SettingValueAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.settings_values);
((TitleBar)findViewById(R.id.theTitleBar)).init(this,displayStrings.DS_CATEGORIES);
adapter = new SettingValueAdapter(this);
DrivetoNativeManager nativeManager = DrivetoNativeManager.getInstance();
nativeManager.getCategories(new CategoriesListener() {
@Override
public void onComplete(Category[] aCategories) {
categories = aCategories;
refreshListIcons();
}
});
final ListView list = (ListView)findViewById(R.id.settingsValueList);
list.setAdapter(adapter);
list.setonItemClickListener(new AdapterView.OnItemClickListener() {
@Override
..
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
..
}
public void refreshListIcons() {
NativeManager nativeManager = AppService.getNativeManager();
SettingsValue[] values = new SettingsValue[categories.length];
for (int i = 0; i < categories.length; i++) {
values[i] = new SettingsValue(categories[i].value, nativeManager.getLanguageString(categories[i].displayString), false);
values[i].icon = ResManager.GetSkinDrawable(categories[i].iconName + ".bin");
}
adapter.setValues(values);
}
}
public class SettingValueAdapter extends BaseAdapter {
private SettingsValue[] values;
private LayoutInflater inflater;
public SettingValueAdapter(Context context) {
inflater = LayoutInflater.from(context);
}
...
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = inflater.inflate(R.layout.settings_item, null);
}
SettingsValue item = values[position];
CheckedTextView name = (CheckedTextView) convertView.findViewById(R.id.itemText);
ImageView iconView = (ImageView) convertView.findViewById(R.id.itemIcon);
if (iconView != null && (item != null) && (item.icon != null)) {
iconView.setimageDrawable(item.icon);
iconView.setVisibility(View.VISIBLE);
} else {
iconView.setVisibility(View.GONE);
}
name.setText(item.display);
name.setChecked(item.isSelected);
View container = convertView.findViewById(R.id.itemContainer);
if (position == 0) {
..
return convertView;
}
public void setValues(SettingsValue[] values) {
this.values = values;
notifyDataSetChanged();
}
}
解决方法:
您应该扩展ArrayAdapter而不是BaseAdapter:
http://developer.android.com/reference/android/widget/ArrayAdapter.html
此类适用于数组和集合,并且可以正确处理有关内部状态的所有问题.
在这种情况下,请在调用notifyDataSetChanged之前,先在适配器对象本身上使用clear,然后使用addAll.另一个方法是更改绑定到适配器的数组或集合.
我在这里找到了一个做得很好的教程:
http://www.vogella.com/articles/AndroidListView/article.html
希望能帮助到你 !!最好的祝福 !!
android adapter notifydatasetchanged时,如何不上焦点
最近遇到一个非常头疼的问题:
问题的场景如下
girdview刷新时用的是adapter.notifydatasetchanged,当刷新前gridview无数据时,刷新后gridview会上焦点,而且选中第一个item。当刷新前gridview有数据时,刷新后gridview就不会重新上焦点。
哪位大神帮忙解决一下,我真的不想上焦点,只想刷新数据显示就可以了
Android adapter.notifyDataSetChanged()不工作?
//stripped down version public class main extends ListActivity { ArrayList<String> listItems = new ArrayList<String>(); ArrayAdapter<String> adapter; final EditText input = (EditText)findViewById(R.id.input); input.addTextChangedListener(new TextWatcher() { public void onTextChanged(CharSequence s,int start,int before,int count) { if(!input.getText().toString().equals("")) { new GetDataTask().execute(input.getText().toString()); } } }); private class GetDataTask extends AsyncTask<String,Void,ArrayList<String>> { protected ArrayList<String> doInBackground(String... query) { URL url = new URL("http://myserversaddressgoeshere.com/search/thequerygoeshere"); URLConnection conn = url.openConnection(); BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream())); ArrayList<String> items = new ArrayList<String>(); //the code that parses the JSON goes here; it writes some strings to items return items; } protected void onPostExecute(ArrayList<String> items) { listItems = items; adapter.notifyDataSetChanged(); } } }
(这是我的第一篇文章,所以如果我试图使代码块失败,我提前道歉)
在onPostExecute方法中,在设置listItems等于项目后,如果我打印listItems的内容,它们正是我想要的.但是,由于某些原因,当从onPostExecute执行时,adapter.notifyDataSetChanged()似乎什么都不做(当它从主线程调用时,它工作正常).
如果有任何人知道发生了什么和/或如何解决它,我真的很感激.谢谢!
解决方法
protected void onPostExecute(ArrayList<String> items) { listItems.clear(); listItems.addAll(items); adapter.notifyDataSetChanged(); }
我希望你已经在做这件事了
adapter = new ArrayAdapter<String>(listItems);
Android notifyDataSetChanged
我有一个列表,其中填充了自定义ArrayAdapter.
我想每秒更新一个进度条,所以我试图使用notifyDataSetChanged()来重新绘制列表,但它似乎不起作用.
解决方法:
你如何更新为ArrayAdapter提供的List数据结构?
请在这里查看我的答案:notifyDataSetChanged example
有关ArrayAdapters的问题和更新保存notifyDataSetChanged数据的List工作.
Android notifyDataSetChanged无法正常工作
我有一个适配器,该适配器使用来自TreeMap的数据填充2个TextViews的ListView.
当用户在ListView中添加或删除Data时,应刷新View.
所以这是我的适配器:
public class MyAdapter extends BaseAdapter {
private final ArrayList mData;
public MyAdapter(Map<String, String> map) {
mData = new ArrayList();
mData.addAll(map.entrySet());
}
@Override
public int getCount() {
return mData.size();
}
@Override
public Map.Entry<String, String> getItem(int position) {
return (Map.Entry) mData.get(position);
}
@Override
public long getItemId(int position) {
// Todo implement you own logic with ID
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
final View result;
if (convertView == null) {
result = LayoutInflater.from(parent.getContext()).inflate(R.layout.my_adapter_item, parent, false);
} else {
result = convertView;
}
Map.Entry<String, String> item = getItem(position);
// Todo replace findViewById by ViewHolder
((TextView) result.findViewById(android.R.id.text1)).setText(item.getKey());
((TextView) result.findViewById(android.R.id.text2)).setText(item.getValue());
return result;
}}
因为我想通过对话框更新视图,并且在阅读了另一个问题后,需要从UIThread调用notifyDataSetChanged(),所以我将notifyDataSetChanged()放入了Runnable中.就这个:
Runnable run = new Runnable(){
public void run(){
Log.v("in the Runnable: ", String.valueOf(colorHashMap));
adapter.notifyDataSetChanged();
}
};
这就是如何在对话框中调用Runnable的方法:
DefaultColorActivity.this.runOnUiThread(run);
但是,无论我尝试做什么,列表都不会更新.我需要关闭并重新打开活动以获取新列表.
解决方法:
在您的适配器中创建一个方法,例如:
public void updateList(){
notifyDataSetChanged()
}
并在要刷新列表时调用此方法
我们今天的关于java-`notifyDataSetChanged`我缺少什么?和notifydatasetchanged()的分享已经告一段落,感谢您的关注,如果您想了解更多关于android adapter notifydatasetchanged时,如何不上焦点、Android adapter.notifyDataSetChanged()不工作?、Android notifyDataSetChanged、Android notifyDataSetChanged无法正常工作的相关信息,请在本站查询。
本文标签: