2017-06-02 5 views
0

Ich möchte RecyclerView so etwas schaffen:RecyclerView GridLayoutManager und dynamische Zeilenhöhe

Expected Output

Aber ich dies immer:

Actual Output

Gibt es eine Möglichkeit zu machen passiert das mit RecyclerView?

+0

willkommen zu ersetzen Überlauf zu stapeln. Bitte lesen Sie den Link, um effektive Fragen zu stellen. https://stackoverflow.com/help/how-to-ask – pvpkiran

+0

poste deinen Code für Java und XML-Dateien hier – mdb

+0

@ mdb_5203 gepostet –

Antwort

1

versuchen & Kontrolle Ihrer Linie

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

mit

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

es funktioniert, thakns –

0

init:

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

Die Funktion, die die Post bereitet sie in recyclerView hinzufügen

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); 
    } 
}} 

Adapter:

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 wird die Ansichten hinzufügen zum Layout

Verwandte Themen