2016-12-01 73 views
0

我使用Retrofit 2.0从我的api检索数据并使用recyclerView来显示它。用新数据刷新recyclerView改造

我的主要活动有一个选项卡布局,其中一个选项卡具有recyclerView,并且该选项卡的片段类正在用于检索数据和更新布局。

在我的主布局中,我有一个制作一个帖子的工厂(所有帖子都在片段级别中检索),并且此工厂具有在主要活动中制作帖子的功能。

那么当晶圆厂的功能结束并且贴子成功保存在我的数据库中后,如何刷新布局?

基本上 用户点击晶圆厂>使他的职位>警报对话框关闭> recyclerView应刷新添加的新数据。

我的片段类:

public class PostsRecentTab extends Fragment { 

private static final String TAG = MainActivity.class.getSimpleName(); 

private RecyclerView feedView; 
private ProgressDialog pDialog = MainActivity.pDialog; 
LinearLayoutManager layoutManager; 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    final View v = inflater.inflate(R.layout.tab_recent_posts, container, false); 

    pDialog.setCancelable(false); 
    layoutManager = new LinearLayoutManager(this.getContext()); 
    feedView = (RecyclerView) v.findViewById(R.id.feedView); 

    requestData(); 

    return v; 
} 

public void requestData() { 
    SocialHubAPI apiService = ApiClient.getClient().create(SocialHubAPI.class); 

    pDialog.setMessage("Refreshing..."); 
    showDialog(); 

    Call<StatusResponse> call = apiService.getStatuses(); 
    call.enqueue(new Callback<StatusResponse>() { 
     @Override 
     public void onResponse(Call<StatusResponse> call, Response<StatusResponse> response) { 
      int statusCode = response.code(); 
      List<Status> statuses = response.body().getStatuses(); 
      Log.d(TAG, "Status Code: " + statusCode); 
      hideDialog(); 

      updateView(statuses); 

     } 

     @Override 
     public void onFailure(Call<StatusResponse> call, Throwable t) { 
      Log.e(TAG, t.toString()); 
     } 
    }); 
} 

private void updateView(List<Status> statuses) { 

    StatusesAdapter adapter = new StatusesAdapter(statuses, R.layout.feed_item, getContext()); 
    feedView.setLayoutManager(layoutManager); 
    feedView.setAdapter(adapter); 
} 

private void showDialog() { 
    if (!pDialog.isShowing()) 
     pDialog.show(); 
} 

private void hideDialog() { 
    if (pDialog.isShowing()) 
     pDialog.dismiss(); 
} 
} 

我的Fab在点击:

FloatingActionButton postStatus = (FloatingActionButton) findViewById(R.id.postStatus); 

    postStatus.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(final View view) { 
      AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); 
      builder.setTitle("Post Status"); 

      // Set up the input 
      final EditText input = new EditText(MainActivity.this); 
      // Specify the type of input expected; this, for example, sets the input as a password, and will mask the text 
      input.setInputType(InputType.TYPE_CLASS_TEXT); 
      builder.setView(input); 

      // Set up the buttons 
      builder.setPositiveButton("Post", new DialogInterface.OnClickListener() { 
       @Override 
       public void onClick(DialogInterface dialog, int which) { 
        postText = input.getText().toString(); 
        processPost(postText, sessionManager.getToken()); 
        Snackbar.make(view, "Status posted!", Snackbar.LENGTH_LONG).show(); 
       } 
      }); 
      builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 
       @Override 
       public void onClick(DialogInterface dialog, int which) { 
        dialog.cancel(); 
       } 
      }); 

      builder.show(); 
     } 
    }); 

的Fab的onClick调用此方法:

protected void processPost(String postText, String token) { 
    SocialHubAPI apiService = ApiClient.getClient().create(SocialHubAPI.class); 

    pDialog.setMessage("Posting..."); 
    showDialog(); 

    final PostRequest postRequest = new PostRequest(); 
    postRequest.setStatus(postText); 

    Call<PostResponse> call = apiService.postStatus(postRequest, token); 
    call.enqueue(new Callback<PostResponse>() { 
     @Override 
     public void onResponse(Call<PostResponse> call, Response<PostResponse> response) { 
      hideDialog(); 
      Toast.makeText(getApplicationContext(), "Status Posted Successfully!", Toast.LENGTH_LONG).show(); 
     } 

     @Override 
     public void onFailure(Call<PostResponse> call, Throwable t) { 
      Log.e(TAG, t.toString()); 
     } 
    }); 
} 
+0

使您的晶圆厂看不见,毕竟数据检索,使晶圆厂可见 – sushildlh

+0

@sushildlh但这将如何帮助我刷新我的回收视图? –

+0

你的晶圆厂的onclick方法在哪里? – sushildlh

回答

1

你应该updateView(List<Status> statuses)无效列表,而不是设置的再次适配器。仅在onCreate()中实例化适配器。

这个功能应该是这样的:

适配器类

public void addNewStatutes(List<Status> statuses) 
{ 
    this.statuses.addAll(statuses); 
    notifyDataSetChanged(); 
} 

另外在onResponse使用EventBus或Rx

adapter.addNewStatutes(statuses) 

,因为你的观点可以被摧毁,这种方法可能会崩溃您应用程序。


根据文档增加了notifyDataSetChanged