2016-03-08 41 views
0

我有一个适配器,它不会在通过改装获取新数据后得到通知,但是,我使用notifyDataSetChanged并在日志中获得成功,但是没有任何工作:( 另外我尝试使用本地阵列与此适配器和它的伟大工程提取新数据后通知适配器

public class alberrClassNews extends Fragment { 

    private RecyclerView recyclerView; 
    private List<alberrNewsListContent> alberrNews = new ArrayList<alberrNewsListContent>(); 
    private final String TAG = "Get JSONArray"; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.alberrnewsclass, container, false); 
     getActivity().setTitle("nnnn"); 

     recyclerView = (RecyclerView) view.findViewById(R.id.alberrNewsList); 

     LinearLayoutManager layoutManager = new LinearLayoutManager(getActivity()); 
     recyclerView.setLayoutManager(layoutManager); 
     layoutManager.setReverseLayout(true); 
     layoutManager.setStackFromEnd(true); 

     final alberrNewsAdapter aNA = new alberrNewsAdapter(getActivity(), alberrNews); 
     recyclerView.setAdapter(aNA); 


     final ProgressDialog progressDialog = new ProgressDialog(getActivity()); 
     progressDialog.setMessage("loading"); 
     progressDialog.show(); 

     final Retrofit alberrRetrofit = new Retrofit.Builder() 
       .baseUrl("http://nn.com/abbn/") 
       .addConverterFactory(GsonConverterFactory.create()).build(); 
     alberrService service = alberrRetrofit.create(alberrService.class); 


     Call<JSONArray> call = service.alberrNews(); 
     call.enqueue(new Callback<JSONArray>() { 
      @Override 
      public void onResponse(Call<JSONArray> call, Response<JSONArray> response) { 
       progressDialog.dismiss(); 
       Log.i(TAG, "success"); 

       try{ 
        JSONArray jsonArray = response.body().getJSONArray(0); 
        for (int i = 0 ; i < jsonArray.length() ; i++){ 
         JSONObject jsonObject = jsonArray.getJSONObject(i); 
         alberrNewsListContent newsContent = new alberrNewsListContent(); 

         newsContent.setAlberrNewsTitle(jsonObject.getString("title")); 
         newsContent.setAlberrNewsSubject(jsonObject.getString("subject")); 
         newsContent.setAlberrNewsImage(jsonObject.getString("image")); 
         alberrNews.add(newsContent); 
        } 

       } catch (JSONException e){ 
        e.printStackTrace(); 
       } 

       aNA.notifyDataSetChanged(); 
      } 

      @Override 
      public void onFailure(Call<JSONArray> call, Throwable t) { 
       Log.i(TAG, "Failed"); 
       progressDialog.dismiss(); 

       Toast.makeText(getActivity().getApplicationContext(), 
        "no connection", Toast.LENGTH_SHORT).show(); 
      } 
     }); 
     return view; 
    } 

适配器类别通过公共方法

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

     private List<alberrNewsListContent> newsListContent; 
     private Context context; 

     public alberrNewsAdapter(Context ncontext , List<alberrNewsListContent> nnewsListContent){ 
      this.context = ncontext; 
      this.newsListContent = nnewsListContent; 
     } 

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

     @Override 
     public void onBindViewHolder(alberrNewsAdapter.ViewHolder holder, int position) { 

      final alberrNewsListContent newsContent = newsListContent.get(position); 

      holder.alberrNewsTitle.setText(newsContent.getAlberrNewsTitle()); 
      holder.alberrNewsSubject.setText(newsContent.getAlberrNewsSubject()); 

      Glide.with(context) 
       .load(newsContent.getAlberrNewsImage()) 
       .override(300, 260) 
       .into(holder.alberrNewsImage); 
     } 

     @Override 
     public int getItemCount() { 
      return newsListContent.size(); 
     } 


     public void replaceDataSet(List<alberrNewsListContent> alberrNews){ 
      this.newsListContent = alberrNews; 
      notifyDataSetChanged(); 

     } 

     public static class ViewHolder extends RecyclerView.ViewHolder{ 

      TextView alberrNewsTitle; 
      TextView alberrNewsSubject; 
      ImageView alberrNewsImage; 
      CardView alberrNewsCardView; 

      public ViewHolder(View itemView) { 
       super(itemView); 

       alberrNewsTitle = (TextView)itemView.findViewById(R.id.alberrNewsTitle); 
       alberrNewsSubject = (TextView)itemView.findViewById(R.id.alberrNewsSubject); 
       alberrNewsImage = (ImageView)itemView.findViewById(R.id.alberrNewsImage); 
       alberrNewsCardView = (CardView)itemView.findViewById(R.id.alberrNewsCardView); 
      } 
     } 
    } 

回答

0

通过新的列表内容适配器和调用notifyDataSetChanged();这种方法里面,您目前”不要更新t中的列表他适配器。

1

在您的alberrNewsAdapter中,您可以创建一个名为replaceDataSet()的新方法,该方法将替换适配器中的数据集并呼叫notifyDataSetChanged()

private List<alberrNewsListContent> alberrNews alberrNews; 


public void replaceDataSet(List<alberrNewsListContent> alberrNews){ 
    this.alberrNews = alberrNews; 
    notifyDataSetChanged(); 

} 

而且在不是调用aNA.notifyDataSetChanged();呼叫aNA.replaceDataSet();

+0

遗憾的是它不工作,除了我在logcat的JSONException注意到onResponse():指数0超出范围[0..0),这是什么意思? – ramy

+0

@ramy您可以发布您的适配器代码吗? –

+0

我编辑了我的问题:) – ramy

相关问题