使用 SwipeRefresh 从数据库更新 RecyclerView

马哈茂德

我试图在 onCreate 中刷新时从数据库中获取更新的数据,返回的数据是正确的,当我刷新时,似乎返回的数据也正确(在 Toast 中)但 gui 没有用新数据刷新我做错了什么!

public class NewsPage extends Fragment implements SwipeRefreshLayout.OnRefreshListener {

private RecyclerView rv;
private rvAdapter adapter;
public static ArrayList<String> Descriptions = new ArrayList<>();
public static ArrayList<String> FullText = new ArrayList<>();
public static ArrayList<String> ids = new ArrayList<>();
public static List<rvData> data = new ArrayList<>();
public static int[] icons = {R.drawable.day7, R.drawable.day7, R.drawable.day7, R.drawable.day7, R.drawable.day7};
public static ArrayList<String> titles = new ArrayList<>();
public  SwipeRefreshLayout strID;
GridTagsAdapter gridTagsAdapter;
public   String tags[] = { "#???? ?????","#???? ???","#????? ?????","#???? ????" , "#????? ????????"};



@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    final View v = inflater.inflate(R.layout.news_screen, container, false);
    strID = (SwipeRefreshLayout) v.findViewById(R.id.strID);
    strID.setOnRefreshListener(this);


     strID.post(new Runnable() {
         @Override
         public void run() {


              JSONTask asyncTask = (JSONTask) new JSONTask(new JSONTask.AsyncResponse(){


        @Override
        public void processFinish(ArrayList<ArrayList<String>> output) {


               strID.setRefreshing(true);

            Descriptions = output.get(0);
            titles = output.get(1);
            ids = output.get(2);
            FullText = output.get(3);


            rv = (RecyclerView) v.findViewById(R.id.NewsScreen);
            adapter = new rvAdapter(getActivity(), getData());
            adapter.notifyDataSetChanged();
            rv.setAdapter(adapter);
            rv.setLayoutManager(new LinearLayoutManager(getActivity(), LinearLayoutManager.VERTICAL, false));
            rv.setNestedScrollingEnabled(false);
               adapter.notifyDataSetChanged();
                strID.setRefreshing(false);


        }
    }).execute("http://192.168.1.106:8000/database/news/g/?format=json");
         }
     });





    return v;
}





public List<rvData> getData() {

    for (int i = 0; i < Descriptions.size(); i++) {
        rvData current = new rvData();
        current.titleid = titles.get(i);
        current.postbodyid = Descriptions.get(i);
        current.imgid = icons[0];
        gridTagsAdapter   = new GridTagsAdapter(getActivity(),tags);
        current.tags_adapter= gridTagsAdapter;
        data.add(current);
    }
    return data;
}


@Override
public void onRefresh() {

     JSONTask asyncTask = (JSONTask) new JSONTask(new JSONTask.AsyncResponse(){


        @Override
        public void processFinish(ArrayList<ArrayList<String>> output) {


            strID.setRefreshing(true);

            Descriptions.clear();
            titles.clear();
            ids.clear();
            FullText.clear();

            Descriptions = output.get(0);
            titles = output.get(1);
            ids = output.get(2);
            FullText = output.get(3);

            adapter.notifyDataSetChanged();

            Toast.makeText(getActivity(), Descriptions.toString(), Toast.LENGTH_LONG).show();

            strID.setRefreshing(false);

        }
    }).execute("http://192.168.1.106:8000/database/news/g/?format=json");

}
}

我在 onRefresh 中制作的 Toast 打印正确的数据但 Gui 不刷新

Pavneet_Singh

通过这样做Descriptions = output.get(0);Descriptions将开始指向新列表并丢失对适配器正在使用的列表的引用,因此当前列表和适配器列表不再相同,因此出现问题

而不是这个

Descriptions = output.get(0);
titles = output.get(1);
ids = output.get(2);
FullText = output.get(3);

// inside on refresh
data.clear();
//...code
Descriptions.addAll(output.get(0));
titles.addAll(get(1));
ids.addAll(get(2));
FullText.addAll(get(3));
getData();

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类常见问题

将recyclerview与数据库一起使用

来自分类Dev

将 RecyclerView 与数据库一起使用

来自分类Dev

如何使用DataRow更新数据库?

来自分类Dev

使用javascript变量更新数据库

来自分类Dev

使用Java从onClick更新数据库

来自分类Dev

使用变量更新数据库表

来自分类Dev

使用循环更新数据库表

来自分类Dev

使用javascript更新数据库值

来自分类Dev

使用AJAX表单更新数据库

来自分类Dev

使用MYSQLi更新数据库

来自分类Dev

使用Laravel更新数据库

来自分类Dev

使用php更新sql数据库

来自分类Dev

使用Codeigniter更新mysql数据库

来自分类Dev

使用JavaScript从数据库更新JSON

来自分类Dev

使用 post() 更新数据库

来自分类Dev

使用 BeautifulSoup 更新 Django 数据库

来自分类Dev

使用变量更新 joomla 数据库

来自分类Dev

使用值范围更新数据库

来自分类Dev

如何使用RxJava从数据库将数据加载到RecyclerView中?(MVP + RxJava + SQLite)

来自分类Dev

使用来自两个数据库表的数据填充 RecyclerView Item

来自分类Dev

使用 RecyclerView 和数据库进行双重数据维护

来自分类Dev

切换按钮在使用 mysqlite 数据库在 RecyclerView 中滚动时更改其状态

来自分类Dev

图像不会使用 picasso 从 firebase 数据库加载到 recyclerview

来自分类Dev

Recyclerview未使用新数据更新

来自分类Dev

使用提交按钮更新数据库数据

来自分类Dev

如何使用AngularJS更新/编辑数据库中的数据

来自分类Dev

如何使用AND条件更新SQLite数据库中的数据?

来自分类Dev

如何使用linq更新数据库中的数据

来自分类Dev

在MySQL数据库中使用JDBC更新数据