2017-06-02 35 views
0

私はRecyclerViewにこのようなものを作りたい:RecyclerView GridLayoutManagerと動的な行の高さ

Expected Output

しかし、私はこの取得しています:

Actual Output

を作るための方法がありますそれはRecyclerViewで起こりますか?

+0

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

あなたのラインを交換&チェックをしてみてくださいスタックオーバーフローを歓迎します。効果的な質問をする方法については、リンクをご覧ください。 https://stackoverflow.com/help/how-to-ask – pvpkiran

+0

ここにjavaとxmlファイルのコードを投稿してください – mdb

+0

@ mdb_5203投稿 –

答えて

1

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

それは動作しています、thakns –

0

のinit:

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は、ビューを追加する予定ですレイアウトへ

関連する問題