2016-09-15 59 views
0

我已經在android中實現了android主/明細流模板。我已經改變它,以便在第一次加載時從數據庫加載數據。該列表填充罰款。在android上更新數據更改的主/明細列表視圖

我有一個刷新按鈕,它調用帶有回調的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); 
    } 
+0

你需要調用'SimpleItemRecyclerViewAdapter.updateData()'在'refreshWeatherCharts()'方法。 – Abbas

+0

感謝您的重播。當我添加語句時,它不識別updateData語句。我是否必須在全球範圍內聲明或初始化/參考它如何?乾杯 –

+0

管理對其進行排序。我將recyclerView重構爲以下 –

回答

0

管理對它進行排序。我重構了recyclerView以下幾點:

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

    recyclerView.setAdapter(mAdapter); 
0

你並不需要在每個數據中的一些項目的價值變動設定時間創建一個新的適配器,或者如果您添加新的項目,你的數據集,或刪除的項目,或者即使整個列表已經改變。只需更新適配器中的數據集,在您的情況下,該數據集爲WeatherChart s的List

public void refreshWeatherCharts() { 

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

       WeatherChartListBuilder.loadData(); 
       RecyclerView.Adapter adapter = ((RecyclerView) recyclerView).getAdapter(); 
       ((SimpleItemRecyclerViewAdapter) adapter).updateData(WeatherChartListBuilder.ITEMS); 
      } 
     } 
    }; 

    callbackservice.execute(null, null, null); 
} 
0
viewAdapter = recyclerView.getAdapter(); 

viewAdapter.notifyDataSetChanged();