2017-06-02 150 views
0

我想在RecyclerView創造這樣的事情:RecyclerView GridLayoutManager和動態的行高

Expected Output

但是,我得到這個:

Actual Output

有沒有一種方法,使它發生在RecyclerView?

+0

歡迎堆棧溢出。請通過鏈接瞭解如何提出有效問題。 https://stackoverflow.com/help/how-to-ask – pvpkiran

+0

在這裏發佈您的代碼爲java和xml文件 – mdb

+0

@ mdb_5203發佈 –

回答

1

嘗試&檢查更換您的行

postLine.setLayoutManager(new GridLayoutManager(getActivity(),2)); 

postLine.setLayoutManager(new StaggeredGridLayoutManager(2,StaggeredGridLayoutManager.VERTICAL)); 
+0

它的工作,thakns –

0

初始化:

postLine.setAdapter(postsAdapter); 
postLine.setLayoutManager(new GridLayoutManager(getActivity(),2)); 

,準備後添加他們recyclerView功能

private void preparePosts(JSONArray posts){ 
    listOfLine1.clear(); //SparseArray 
    listOfLine2.clear(); //SparseArray 
    postLine.removeAllViews(); //RecyclerView 
    postList.clear(); //ListArray<Post> postList 
    int postline2h = 0; 
    int postline1h = 0; 

    try{ 
     Post ps; 
     for(int i = 0; i<posts.length();i++){ 
      ps = new Post(posts.getJSONObject(i)); 
      if(postline1h>postline2h){ 
       listOfLine2.put(listOfLine2.size(),ps); 
       postline2h += ps.getHeight(); 
      }else{ 
       postline1h += ps.getHeight(); 
       listOfLine1.put(listOfLine1.size(),ps); 
      } 
     } 

     int i =0; 
     boolean firstnull,secondnull; 
     while (i!=listOfLine2.size()-1 || i!=listOfLine1.size()-1){ 
      if(listOfLine1.get(i)!=null){ 
       firstnull = false; 
       postList.add(listOfLine1.get(i)); 
       listOfLine1.remove(i); 
      }else firstnull = true; 

      if(listOfLine2.get(i)!=null){ 
       secondnull = false; 
       postList.add(listOfLine2.get(i)); 
       listOfLine2.remove(i); 
      }else secondnull = true; 

      if(secondnull && firstnull) break; 
      i++; 
     } 
     postsAdapter.notifyDataSetChanged(); 
    }catch (Exception e){ 
     log(e); 
    } 
}} 

適配器:

public class PostsAdapter extends RecyclerView.Adapter<PostsHolder> { 
    private ArrayList<Post> posts; 
    public PostsAdapter(ArrayList<Post> postslist){ 
     posts = postslist; 
    } 
    @Override 
    public int getItemCount() { 
     return posts.size(); 
    } 
    @Override 
    public PostsHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     return new PostsHolder(new LinearLayout(parent.getContext())); 
    } 
    @Override 
    public void onBindViewHolder(PostsHolder holder, int position) { 
     holder.setPost(posts.get(position)); 
    } 
    @Override 
    public void onViewRecycled(PostsHolder holder) { 
     super.onViewRecycled(holder); 
     holder.getPost().die(); 
    } 
} 

onBindViewHolder post.setPost是要添加的意見到佈局

相關問題