标签: notifydatasetchanged

是否有任何Observers在RecyclerView.Adapter中编写,以了解数据集是否已更改?

RecyclerView用它实现了Custom Adapter如下

全球宣言如下

private LinearLayoutManager linearLayoutManager;
private int pastVisibleItems, visibleItemCount, totalItemCount;
private CustomRecyclerViewAdapter customRecyclerViewAdapter;
Run Code Online (Sandbox Code Playgroud)

首先,我在onCreate()方法内部创建了适配器实例,其中包含Empty Array并将其设置为recyclerView

linearLayoutManager = new LinearLayoutManager(getActivity());
recyclerView.setLayoutManager(linearLayoutManager);
DividerItemDecoration dividerItemDecoration = new DividerItemDecoration(
    Utility.ItemDecorationConst);
recyclerView.addItemDecoration(dividerItemDecoration);
customRecyclerViewAdapter = new CustomRecyclerViewAdapter(getActivity());

recyclerView.setAdapter(customRecyclerViewAdapter);
recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {

    visibleItemCount = linearLayoutManager.getChildCount();
    totalItemCount = linearLayoutManager.getItemCount();
    pastVisibleItems = linearLayoutManager.findFirstVisibleItemPosition();
    if (loading) {
        if ((visibleItemCount + pastVisibleItems) >= totalItemCount) {
            loading = false;
            customRecyclerViewAdapter.addProgressBarEntry();
            controller.getNextPage(PublisherAppContainerFragment.this);
        }
    } …
Run Code Online (Sandbox Code Playgroud)

android observers notifydatasetchanged recycler-adapter android-recyclerview

14
推荐指数
2
解决办法
5109
查看次数

当notifydatasetchanged时,为什么Glide会使项目ImageView闪烁

我使用滑翔3.7.0RecyclerView.刷新(调用notifyDataSetChanged)时,项目视图始终闪烁.

这是我的代码:

Glide
  .with(context)
  .load(filepath)
  .diskCacheStrategy(DiskCacheStrategy.NONE)
  .skipMemoryCache(true)
  .dontAnimate()
  .into(imageview);
Run Code Online (Sandbox Code Playgroud)

当我不使用缓存时,在调用方法ImageViewnotifyDataSetChangedGlide尚未完成加载位图时,它具有空位图.

如果我使用以下代码:

Glide
  .with(context)
  .load(filepath)
  .dontAnimate()
  .into(imageview);
Run Code Online (Sandbox Code Playgroud)

然后项目ImageView不再闪烁(使用缓存).

我想动态更新项目视图,因此我禁用了滑动缓存.

有没有解决这个眨眼错误的解决方案?

非常感谢你!

android blink notifydatasetchanged android-recyclerview android-glide

12
推荐指数
2
解决办法
8164
查看次数

如何在保留字符状态的情况下向autocompletetextview动态添加建议

问题描述:

我在AutoCompleteTextView面临一些问题,我必须在每次按键后显示建议.事情是,建议列表是动态像谷歌的建议功能.这意味着应该在用户输入时添加新建议,并且应显示所有匹配的旧建议.

例如

我写"te"然后它应该显示以前的建议,如"test1"和"test2"以及我将从Web API获得的新建议.假设web api给了我"茶"和"紧张"的字样.

现在,AutoCompleteTextView将"te"作为字符串,其下方显示所有四个建议.

这正是我要找的.

看起来很简单,但它显示出一种奇怪的行为.

我正在使用我在全局声明的默认ArrayAdapter类实例.

arrayAdapter=new ArrayAdapter<String>(this, android.R.layout.simple_dropdown_item_1line,suggestions);
word.setAdapter(arrayAdapter);
Run Code Online (Sandbox Code Playgroud)

建议是ArrayList.

从WebApi获得新结果后,我只需致电

arrayAdapter.notifyDataSetChanged();
Run Code Online (Sandbox Code Playgroud)

刷新数据观察者和附加的视图(在我们的例子中是AutoCompleteListView).

但它结束了建议.

当我不使用notifyDataSetChanged();它时,无论我输入的字符是什么,都会显示所有建议.

我尝试使用自定义过滤器,因为我不能使用notifyDataSetChanged(),但没有一个是有用的.

我发布图片以避免混淆.在此输入图像描述

我有一个混乱,为什么notifyDataSetChanged();它不起作用.我没有使用相同的arrayAdapter实例的任何其他列表引用.我真的怀疑这是一个参考问题.

android autocompletetextview notifydatasetchanged android-filterable

11
推荐指数
1
解决办法
8848
查看次数

RecyclerView 正在复制项目

当我滚动它时,我的 recyclerview 正在复制项目并且我已经在调用adapter.notifyDataSetChanged().

所以,可能我在错误的地方调用了数据集更新,但我找不到它是如何工作的。

这是一些代码:

       RecyclerView packageRecyclerView;
        Intent intent;
        ChecklistAdapter recyclerViewAdapter;
    
        @Override
        protected void onCreate(@Nullable Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_checklist);
    
            intent = getIntent();
            size = intent.getIntExtra("size", 0);
            Log.d(TAG, "onCreate - Qtd Questões: " + size);
    
            packageRecyclerView = findViewById(R.id.package_lst);
    
            LinearLayoutManager recyclerLayoutManager = new LinearLayoutManager(this);
            packageRecyclerView.setLayoutManager(recyclerLayoutManager);
    
            DividerItemDecoration dividerItemDecoration =
                    new DividerItemDecoration(packageRecyclerView.getContext(),
                            recyclerLayoutManager.getOrientation());
            packageRecyclerView.addItemDecoration(dividerItemDecoration);
    
            List<Checklist> modelList = new ArrayList<>();
            recyclerViewAdapter = new ChecklistAdapter(modelList,this);
            modelList = getPackages();
            recyclerViewAdapter = new ChecklistAdapter(modelList,this);
    
    //        recyclerViewAdapter = new ChecklistAdapter(getPackages(),this);
    
            packageRecyclerView.setAdapter(recyclerViewAdapter);
    
    
        }
    
        private List<Checklist> getPackages() { …
Run Code Online (Sandbox Code Playgroud)

android notifydatasetchanged android-recyclerview

10
推荐指数
3
解决办法
1万
查看次数

在notifyDataSetChanged之后没有调用android getChildView

我有一个expandableListView并试图改变它的孩子:

((SubItem) adapter.getChild(i+1, 5)).setCount(unreadBox);
 adapter.notifyDataSetChanged();
Run Code Online (Sandbox Code Playgroud)

这是我的适配器类:

public class DrawerAdapter extends BaseExpandableListAdapter {

private Context context;
private List<Item> items;
private List<List<SubItem>> subItems;

public DrawerAdapter(Context context, List<Item> items, List<List<SubItem>> subItems) {
    this.context = context;
    this.items = items;
    this.subItems = subItems;
}

@Override
public int getGroupCount() {
    return items.size();
}

@Override
public int getChildrenCount(int groupPosition) {
    return subItems.get(groupPosition).size();
}

@Override
public Object getGroup(int position) {
    return items.get(position);
}

@Override
public Object getChild(int groupPosition, int childPosition) {
    return subItems.get(groupPosition).get(childPosition);
}

@Override
public long getGroupId(int …
Run Code Online (Sandbox Code Playgroud)

android adapter expandablelistview notifydatasetchanged

9
推荐指数
1
解决办法
1530
查看次数

为什么我不需要使用Adapter.notifyDataSetChanged()?

在方法执行contactsList之前是空的readContacts(),换句话说,contactsView.setAdapter(adapter)执行时,它contactsList是空的,那么为什么这段代码仍能正确显示联系人的信息?

public class MainActivity extends AppCompatActivity {

ListView contactsView;
ArrayAdapter<String> adapter;
List<String> contactsList = new ArrayList<String>();

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    contactsView = (ListView) findViewById(R.id.contacts_list);
    adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, contactsList);
    contactsView.setAdapter(adapter);
    readContacts();
}

private void readContacts() {
    Cursor cursor = null;
    try {
        cursor = getContentResolver().query(
                ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
                null, null, null, null);
        while (cursor.moveToNext()) {
            String displayName = cursor.getString(cursor.getColumnIndex(
                    ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME
            ));
            String number = cursor.getString(cursor.getColumnIndex(
                    ContactsContract.CommonDataKinds.Phone.NUMBER
            ));
            contactsList.add(displayName + …
Run Code Online (Sandbox Code Playgroud)

android android-listview android-adapter notifydatasetchanged

9
推荐指数
1
解决办法
822
查看次数

NotifyDataSetChanged- RecyclerView - 这是一个异步调用吗?

notifyDataSetChanged在reinlerview上执行后尝试遵循一组语句.但是当我调试我的应用程序时,调试器notifyDataSetChanged在转到onBindViewHolderrecyclerview的适配器之后到达接下来的几行.所以我的问题是 - notifyDataSetChanged是异步调用吗?如果是,我们会收到回电吗?PS:我已经搜索了这个答案,我找不到合适的答案,这就是我向社区提问的原因.

android asynchronous notifydatasetchanged android-recyclerview

9
推荐指数
1
解决办法
5767
查看次数

在Recyclerview适配器上设置notifyDataSetChanged()

我正在为RecyclerView实现无休止的数据加载.当软件检测到将显示最后一个项目时,它会下载新项目并调用该loadMoreData()函数,但不会显示新数据集.

当我打电话时notifyDataSetChanged(),没有什么事情发生.

我只有一个刷新视图的解决方案是再次设置适配器,但问题是recyclerview返回到第一个位置然后再次recyclelerview从第一个位置向上滚动到最后一个位置.

RecyclerViewActivity.java

    RecyclerView rv;

    DatabaseHelpr databaseHelpr;

    RVAdapter adapter;

    LocationFinder locationfinder;

    Location currentLocation;

    ArrayList<ServiceModel> childList, list;

    private int MainService_ID, city_id;

    String url2;

    ActionBar actionBar;

    JSONArray items = null;

    Utility utility;

    Double lat, longi;

    LinearLayoutManager llm;

    int counter=0;

    ProgressBar progressBar;

    private static final String TAG_ITEMS = "items";

    private static final String TAG_LOCALITY = "Locality";

    private static final String TAG_BUSINESS_ID = "Business_Id";

    private static final String TAG_LONGITUDE = "Longitude";

    private static final String TAG_BUSINESS_NAME = "Business_Name";

    private …
Run Code Online (Sandbox Code Playgroud)

android notifydatasetchanged endlessscroll recycler-adapter android-recyclerview

8
推荐指数
1
解决办法
4万
查看次数

如何在另一个recycleview适配器下的recycleview适配器?

我有一个RecyclerView.它有一个自定义布局,在自定义布局内是另一个RecyclerView.当我通知回收站视图项目已被删除时,我的主回收站视图已更新,但我的自定义视图回收视图未收到通知.

 SwipeDismissRecyclerViewTouchListener listener = new SwipeDismissRecyclerViewTouchListener.Builder(
            recyclerView,
            new SwipeDismissRecyclerViewTouchListener.DismissCallbacks() {
                @Override
                public boolean canDismiss(int position) {

                    return true;
                }

                @Override
                public void onDismiss(View view) {
                    // Do what you want when dismiss
                    int id = recyclerView.getChildAdapterPosition(view);
                    databaseHelper.deleteSingleItem(cartAdapter.cartItemName.get(id));

                    Log.e(TAG, "onDismiss: " + subdata.get(id) + " " + data.get(id));
                    subdataprice.remove(id);
                    subdata.remove(id);
                    addonlist.remove(id);
                    price.remove(id);
                    data.remove(id);
                    cartAdapter.notifyItemRemoved(id);

                    Log.e(TAG, data.size() + " onDismiss: size " + subdata.size());
                    totalPriceTextView.setText(String.valueOf(getTotal()));
                    cartAdapter.updateRecycler();
                }
            })
            .setIsVertical(false)
            .setItemClickCallback(new SwipeDismissRecyclerViewTouchListener.OnItemClickCallBack() {
                @Override
                public void onClick(int i) { …
Run Code Online (Sandbox Code Playgroud)

android android-adapter notifydatasetchanged android-recyclerview

8
推荐指数
1
解决办法
1626
查看次数

如何避免可过滤适配器上的notifyDataSetChanged?

我正在提高应用程序的稳定性和性能,但现在我遇到了来自 Android Studio 的警告。请考虑以下 Adapter 类:

private class CoinsAdapter(private val fragment: CoinFragment, private val coins: List<Coin>): RecyclerView.Adapter<CoinsAdapter.ViewHolder>(), Filterable {

    private val filter = ArrayList(coins)

    override fun onCreateViewHolder(parent: ViewGroup, position: Int): ViewHolder {
        val binding = ItemCoinBinding.inflate(LayoutInflater.from(parent.context), parent, false)
        return ViewHolder(binding)
    }

    override fun onBindViewHolder(holder: ViewHolder, position: Int) {
        val coin = filter[position]
        
        holder.binding.coinImage.setImageResource(coin.image)
        holder.binding.coinText.text = builder.toString()
    }

    override fun getItemCount() = filter.size

    override fun getFilter() = object : Filter() {

        override fun performFiltering(constraint: CharSequence): FilterResults {
            if (constraint.length < 2) …
Run Code Online (Sandbox Code Playgroud)

android kotlin notifydatasetchanged android-filterable

7
推荐指数
1
解决办法
2558
查看次数