标签: notifydatasetchanged

notifyDataSetChanged示例

我正在尝试使用我Android ApplicationnotifyDataSetChanged()方法,ArrayAdapter但它对我不起作用.

我在这里找到答案,notifyDataSetChanged()应该在主线程中运行,但是没有例子.

任何人都可以发送一个例子或至少一个链接?!

android android-arrayadapter notifydatasetchanged

160
推荐指数
4
解决办法
29万
查看次数

notifyDataSetChange无法使用自定义适配器

当我重新填充我的时候ListView,我会用我的方法调用一个特定的方法Adapter.

问题:

当我打电话updateReceiptsList给我时Adapter,数据会刷新,但我ListView没有反映这一变化.

问题:

ListView我打电话时为什么不显示新数据notifyDataSetChanged

适配器:

public class ReceiptListAdapter extends BaseAdapter {

    public List<Receipt> receiptlist;
    private Context context;
    private LayoutInflater inflater;
    private DateHelpers dateH;

    public ReceiptListAdapter(Activity activity, Context mcontext, List<Receipt> rl) {
        context = mcontext;
        receiptlist = rl;
        Collections.reverse(receiptlist);
        inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        dateH = new DateHelpers();
    }

    @Override
    public int getCount() {
        try {
            int size = receiptlist.size();
            return size;
        } catch(NullPointerException ex) { …
Run Code Online (Sandbox Code Playgroud)

android listview baseadapter notifydatasetchanged

114
推荐指数
3
解决办法
14万
查看次数

在notifyDataSetChanged之后Android ListView没有刷新

我的ListFragment代码

public class ItemFragment extends ListFragment {

    private DatabaseHandler dbHelper;
    private static final String TITLE = "Items";
    private static final String LOG_TAG = "debugger";
    private ItemAdapter adapter;
    private List<Item> items;


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.item_fragment_list, container, false);        
        return view;
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.setHasOptionsMenu(true);
        super.onCreate(savedInstanceState);
        getActivity().setTitle(TITLE);
        dbHelper = new DatabaseHandler(getActivity());
        items = dbHelper.getItems(); 
        adapter = new ItemAdapter(getActivity().getApplicationContext(), items);
        this.setListAdapter(adapter);

    }



    @Override
    public void onResume() {
        super.onResume();
        items.clear();
        items …
Run Code Online (Sandbox Code Playgroud)

android android-listview notifydatasetchanged

113
推荐指数
3
解决办法
18万
查看次数

在Android中使用notifyItemRemoved或notifyDataSetChanged与RecyclerView

我正在创建一个使用RecyclerView显示的卡片列表,其中每张卡片都有一个按钮,可以从列表中删除该卡片.

当我使用notifyItemRemoved()删除RecyclerView中的卡时,它会删除项目和动画,但列表中的数据未正确更新.

如果不是这样,我切换到notifyDataSetChanged()然后列表中的项目被删除并正确更新,但然后卡片不动画.

有人有使用notifyItemRemoved()的经验,并知道为什么它的行为与notifyDataSetChanged不同?

以下是我正在使用的一些代码:

private List<DetectedIssue> issues = new ArrayList<DetectedIssue>();

@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
    // - get element from your dataset at this position
    // - replace the contents of the view with that element
    if(position >0){
        RiskViewHolder riskHolder = (RiskViewHolder)holder;
        final int index = position - 1;
        final DetectedIssue anIssue = issues.get(index);

        riskHolder.button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                try {
                    int index = issues.indexOf(anIssue);
                    issues.remove(anIssue);
                    notifyItemRemoved(index);

                    //notifyDataSetChanged(); …
Run Code Online (Sandbox Code Playgroud)

android android-listview notifydatasetchanged android-recyclerview

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

FragmentPagerAdapter notifyDataSetChanged不起作用

我有一个FragmentPagerAdapter.它的getItem方法可以根据它从外部获得的数据返回一个片段.在我更新数据后,它假设显示我打电话notifyDataSetChanged但没有任何反应.我DID覆盖getItemPosition返回的方法POSITION_NONE:

public static class TabsAdapter extends FragmentPagerAdapter implements TabHost.OnTabChangeListener,
        ViewPager.OnPageChangeListener
{
    private final Context mContext;
    private final TabHost mTabHost;
    private final ViewPager mViewPager;
    private final ArrayList<TabInfo> mTabs = new ArrayList<TabInfo>();
    private PagerTabsFragments fragmentDisplayInfo = null; // for now only a
                                                            // single size
                                                            // back
                                                            // stack

    static class PagerTabsFragments
    {
        public int tabPosition;
        public Fragment fragmentToDisplay;
        public Object fragmentInfo;

        public PagerTabsFragments(int tab, Fragment frag, Object info)
        {
            tabPosition = tab;
            fragmentToDisplay …
Run Code Online (Sandbox Code Playgroud)

android android-adapter fragmentpageradapter notifydatasetchanged

34
推荐指数
3
解决办法
2万
查看次数

RecyclerView适配器notifyDataSetChanged无法正常工作

我延长了

RecyclerView.Adapter<RecyclerView.ViewHolder>
Run Code Online (Sandbox Code Playgroud)

当我打电话的时候:

mRecyclerView.getAdapter().notifyDataSetChanged();
Run Code Online (Sandbox Code Playgroud)

没啥事儿.

刷新视图的唯一方法是再次设置适配器(请参阅此答案):

mRecyclerView.setAdapter(new MyAdapter(...));
Run Code Online (Sandbox Code Playgroud)

这个解决方案有两个问题:

  1. 当我再次设置适配器时,我可以看到屏幕上闪烁
  2. 列表视图返回第一个位置.

有任何想法吗?

android android-adapter notifydatasetchanged android-recyclerview

27
推荐指数
2
解决办法
3万
查看次数

如何在不使用notifyDataSetChanged()的情况下更新Listview中的某些数据?

我正在尝试ListView使用下载任务列表创建一个.

下载任务在Service(DownloadService)中管理.每次接收到一大块数据时,任务通过a发送进度Broadcast,由Fragment包含ListView(SavedShowListFragment)的接收.收到Broadcast消息后,SavedShowListFragment将更新适配器和触发器中下载任务的进度notifyDataSetChanged().

列表中的每一行都包含a ProgressBar,a TextView表示正在下载的文件的标题,1表示进度的数值,a Button表示下载完成时暂停/恢复下载或播放保存的节目.

问题是暂停/恢复/播放Button通常没有响应(onClick()没有被调用),我认为这是因为整个列表都经常更新notifyDataSetChanged()(每次都有一大块数据,即收到1024字节,这可能是每秒多次,特别是当有多个下载任务正在运行时).

我想我可以在下载任务中增加数据块的大小,但我真的认为我的方法根本不是最优的!

可以经常打电话notifyDataSetChanged()ListViewUI无响应吗?

有什么办法只更新一些ViewsListView行,即在我的情况ProgressBarTextView与进步的数值,而不调用notifyDataSetChanged(),这将更新整个清单吗?

要更新下载任务的进度ListView,有没有比"getChunk/sendBroadcast/updateData/notifyDataSetChanged"更好的选项?

以下是我的代码的相关部分.

下载服务中的下载任务

public class DownloadService extends Service {

    //...

    private class DownloadTask extends AsyncTask<SavedShow, Void, Map<String, Object>> {

        //...

        @Override
        protected Map<String, Object> doInBackground(SavedShow... params) { 

            //...

            BufferedInputStream in = …
Run Code Online (Sandbox Code Playgroud)

android listview notifydatasetchanged

23
推荐指数
2
解决办法
2万
查看次数

在使用RecyclerView时,notifydatasetchanged调用onCreateViewHolder

我想使用切换来在两个不同的视图之间切换,但使用相同的视图RecyclerView.基本上,一旦你切换,我想要RecyclerView适配器调用,onCreateViewHolder()但这次它将使用不同的布局项目文件.

是否notifydatasetchanged()导致适配器重建?或者还有另一种方式吗?

android android-adapter notifydatasetchanged android-recyclerview

23
推荐指数
2
解决办法
2万
查看次数

如何在RecyclerView上的排序(notifyDataSetChanged)期间提供自定义动画

目前,通过使用默认动画师android.support.v7.widget.DefaultItemAnimator,这是我在排序过程中遇到的结果

DefaultItemAnimator动画视频: https ://youtu.be/EccI7RUcdbg

public void sortAndNotifyDataSetChanged() {
    int i0 = 0;
    int i1 = models.size() - 1;

    while (i0 < i1) {
        DemoModel o0 = models.get(i0);
        DemoModel o1 = models.get(i1);

        models.set(i0, o1);
        models.set(i1, o0);

        i0++;
        i1--;

        //break;
    }

    // adapter is created via adapter = new RecyclerViewDemoAdapter(models, mRecyclerView, this);
    adapter.notifyDataSetChanged();
}
Run Code Online (Sandbox Code Playgroud)

但是,我更喜欢提供自定义动画,而不是排序时的默认动画(notifyDataSetChanged).旧物品将从右侧滑出,新物品将向上滑动.

预期的动画视频: https ://youtu.be/9aQTyM7K4B0

如何在没有RecylerView的情况下实现这样的动画

几年前,我通过使用LinearLayout+ 达到了这个效果View,因为那个时候我们还RecyclerView没有.

这就是动画的设置方式

PropertyValuesHolder alpha = PropertyValuesHolder.ofFloat("alpha", 1.0f, 0f);
PropertyValuesHolder translationX = PropertyValuesHolder.ofFloat("translationX", …
Run Code Online (Sandbox Code Playgroud)

android android-animation notifydatasetchanged android-recyclerview

21
推荐指数
2
解决办法
7287
查看次数

是否有任何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
查看次数