Java 替换ArrayAdapter的列表

Java 替换ArrayAdapter的列表,java,android,arraylist,android-arrayadapter,notifydatasetchanged,Java,Android,Arraylist,Android Arrayadapter,Notifydatasetchanged,我有一个自定义的ArrayAdapter,它为我的ListView使用ArrayList。在这个列表视图中,我有一个AutoCompleteTextView,它还使用一个带有ArrayList的自定义ArrayAdapter。初始化时,此AutoCompleteTextView包含所有产品的名称(大约1250个),减去1(OrderedProductItem的产品) 然后,用户可以使用微调器选择一个产品标签,我创建了一个过滤的ArrayList,因此我只得到包含该产品标签的所有产品的列表(仍然减

我有一个自定义的ArrayAdapter,它为我的ListView使用
ArrayList
。在这个列表视图中,我有一个AutoCompleteTextView,它还使用一个带有
ArrayList
的自定义ArrayAdapter。初始化时,此AutoCompleteTextView包含所有产品的名称(大约1250个),减去1(OrderedProductItem的产品)

然后,用户可以使用微调器选择一个产品标签,我创建了一个过滤的
ArrayList
,因此我只得到包含该产品标签的所有产品的列表(仍然减去1)。因此,我的问题是:替换ArrayAdapter对象列表的最佳方法是什么?

我知道我可以在我的ListActivity中重新创建和分配一个新的ArrayAdapter实例:

myAdapter = new MyAdapter(this, R.layout.item_view, myList);
setListAdapter(myAdapter);
我还知道我可以使用clear和addAll来替换所有内容:

// NOTE: myAdapter.setNotifyOnChange is kept on default (true)
myAdapter.clear();
myAdapter.addAll(myList);

我想第二个可能是最好的,因为我们不想每次都创建一个新实例,或者ArrayAdapter是否有类似于
setArray()
的方法,而我只是在查找时错过了它?或者还有比第二个选项更好的方法吗?

这里您想更改customAdapter的数据,在adapter中创建一个公共方法

public void updateData(ArrayList<T> list){
 mAdapterProductList=list;
}

无需重新实例化适配器

创建回调接口并使用它

public MyAdapter extends ... {

    public interface GetActualListCallback {
        List<OrderedProductItem> getList();
    }

    private GetActualListCallback mCallback;

    public MyAdapter(Context context, int resId, GetActualListCallback callback) {
        super(context, resId)
        mCallback = callback;
    }

    public int getCount() {
        return mCallback.getList().size();
    }

        ....

}

更新列表后,只需在myAdapter上调用notifyDataSetChanged()

为什么害怕性能?@blackbelt首先,它是移动的,所以性能应该始终是一个问题。此外,我的每个ListView项都包含大约10个视图元素(微调器、ImageView、AutoCompleteTextView等)。总之,我已经通过使用排序列表和重用实例来提高性能,现在我希望保持这种方式。另外,我主要是问这个问题,因为我找不到
setArray()
,第二部分是一个for循环,一个接一个地添加它们,但在问这个问题时,我发现
addAll()
(我可以想象它在幕后仍然使用循环。)如果存在性能问题,性能是一个问题。回到主要问题,较重的操作是
getView
,它必须膨胀/测量/布局/绘制ListView的子对象,在这两种情况下,您都在安排它。在我看来,它确实有任何不同。实际上,它确实有不同。创建和设置新适配器将清除并重置列表和回收器-可以重用的视图将被释放并必须重新创建您还可以在adapter updateData(ArrayList list)方法内调用notifyDataSetChanges()。这对我来说很有效,但我还必须重写getCount()方法返回我的列表的大小。Is
madaperProductList=list
madaperProductList.clear()相同+
madaperProductList.addAll(列表)?@rohan taneja。是的,也一样。只需在下一步中添加notifyDataSetChanges()line@PradeepYaduvansy你能调查一下吗
public MyAdapter extends ... {

    public interface GetActualListCallback {
        List<OrderedProductItem> getList();
    }

    private GetActualListCallback mCallback;

    public MyAdapter(Context context, int resId, GetActualListCallback callback) {
        super(context, resId)
        mCallback = callback;
    }

    public int getCount() {
        return mCallback.getList().size();
    }

        ....

}
myAdapter = new MyAdapter(this, R.layout.item_view, this);
setListAdapter(myAdapter);