在数据更改时更新android中的主/详细列表视图

时间:2016-09-15 17:37:37

标签: android android-recyclerview

我在android中实现了android master / detail流程模板。我已经更改了它,以便在第一次加载时从数据库加载数据。列表填写正常。

我有一个刷新按钮,它使用回调调用asyncTask,它使用http有效地更新数据并更新数据库。我现在需要更新列表中的数据。我已经尝试了几种方法来更新recyclerView但它不会更新。任何想法。

    public void refreshWeatherCharts() {


    WeatherChartFetchData callbackservice = new WeatherChartFetchData(this) {
        @Override
        public void receiveData(boolean success) {
            if (success)

                WeatherChartListBuilder.loadData();
        //    RecyclerView.Adapter adapter = ((RecyclerView) recyclerView).getAdapter();
            RecyclerView rc = (RecyclerView) recyclerView;
            rc.invalidate();

        }


    };
    callbackservice.execute(null, null, null);

}


    private void setupRecyclerView(@NonNull RecyclerView recyclerView) {
    recyclerView.setAdapter(new SimpleItemRecyclerViewAdapter(WeatherChartListBuilder.ITEMS));
}

/////////

public class SimpleItemRecyclerViewAdapter
        extends RecyclerView.Adapter<SimpleItemRecyclerViewAdapter.ViewHolder> {

    private final List<WeatherChart> mValues;

    public SimpleItemRecyclerViewAdapter(List<WeatherChart> items) {
        mValues = items;
    }

    public void updateData(ArrayList<WeatherChart> viewModels) {
        mValues.clear();
        mValues.addAll(viewModels);
        notifyDataSetChanged();
    }
    public void addItem(int position, WeatherChart viewModel) {
        mValues.add(position, viewModel);
        notifyItemInserted(position);
    }

    public void removeItem(int position) {
        mValues.remove(position);
        notifyItemRemoved(position);
    }


    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.weatherchart_list_content, parent, false);
        return new ViewHolder(view);
    }

3 个答案:

答案 0 :(得分:0)

管理以对其进行排序。我将recyclelerView重构为以下内容:

 recyclerView = (RecyclerView) findViewById(R.id.weatherchart_list);
    recyclerView.setLayoutManager(new LinearLayoutManager(this));
     mAdapter = new SimpleItemRecyclerViewAdapter(ITEMS);
 //   new SimpleItemRecyclerViewAdapter(ITEMS);
    //SimpleItemRecyclerViewAdapter.ViewHolde

    recyclerView.setAdapter(mAdapter);   

答案 1 :(得分:0)

每次某个项目的值在您的数据集中发生更改,或者您向数据集中添加了新项目,或者删除了项目,或者即使整个列表已更改,也不需要创建新的适配器。只需更新适配器中的数据集(在您的情况下为textarea IF(K2="Yes",(D2+H2*1.2)-F2,IF(J2="Yes",(D2+(H2*1.1)-F2,IF(I2="Yes",D2+ H2-F2, "Avg Gain Not Reached")))) s。

{{1}}

答案 2 :(得分:0)

viewAdapter = recyclerView.getAdapter();

viewAdapter.notifyDataSetChanged();