GVKun编程网logo

java-`notifyDataSetChanged`我缺少什么?(notifydatasetchanged())

10

如果您对java-`notifyDataSetChanged`我缺少什么?感兴趣,那么本文将是一篇不错的选择,我们将为您详在本文中,您将会了解到关于java-`notifyDataSetChanged

如果您对java-`notifyDataSetChanged`我缺少什么?感兴趣,那么本文将是一篇不错的选择,我们将为您详在本文中,您将会了解到关于java-`notifyDataSetChanged`我缺少什么?的详细内容,我们还将为您解答notifydatasetchanged()的相关问题,并且为您提供关于android adapter notifydatasetchanged时,如何不上焦点、Android adapter.notifyDataSetChanged()不工作?、Android notifyDataSetChanged、Android notifyDataSetChanged无法正常工作的有价值信息。

本文目录一览:

java-`notifyDataSetChanged`我缺少什么?(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时,如何不上焦点

android adapter notifydatasetchanged时,如何不上焦点

最近遇到一个非常头疼的问题:

问题的场景如下

girdview刷新时用的是adapter.notifydatasetchanged,当刷新前gridview无数据时,刷新后gridview会上焦点,而且选中第一个item。当刷新前gridview有数据时,刷新后gridview就不会重新上焦点。


哪位大神帮忙解决一下,我真的不想上焦点,只想刷新数据显示就可以了


Android adapter.notifyDataSetChanged()不工作?

Android adapter.notifyDataSetChanged()不工作?

我正在编写一个应用程序,需要从用户获取输入,将其传递到服务器,该服务器返回 JSON字符串,然后在ListView中显示已解析的内容.我正在通过扩展AsyncTask来完成此任务:
//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

Android notifyDataSetChanged

我有一个列表,其中填充了自定义ArrayAdapter.

我想每秒更新一个进度条,所以我试图使用notifyDataSetChanged()来重新绘制列表,但它似乎不起作用.

解决方法:

你如何更新为ArrayAdapter提供的List数据结构?

请在这里查看我的答案:notifyDataSetChanged example

有关ArrayAdapters的问题和更新保存notifyDataSetChanged数据的List工作.

Android notifyDataSetChanged无法正常工作

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无法正常工作的相关信息,请在本站查询。

本文标签: