Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java RecyclerView GridLayoutManager和动态行高_Java_Android_Android Recyclerview - Fatal编程技术网

Java RecyclerView GridLayoutManager和动态行高

Java RecyclerView GridLayoutManager和动态行高,java,android,android-recyclerview,Java,Android,Android Recyclerview,我想在RecyclerView中创建如下内容: 但是,我明白了: 有没有办法通过RecyclerView实现这一点 init: postLine.setAdapter(postsAdapter); postLine.setLayoutManager(new GridLayoutManager(getActivity(),2)); 准备文章以将其添加到recyclerView中的函数 private void preparePosts(JSONArray posts){ list

我想在RecyclerView中创建如下内容:

但是,我明白了:

有没有办法通过RecyclerView实现这一点

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);
    }
}}
private void preparePosts(JSONArray posts){
listOfLine1.clear();//SparseArray
listOfLine2.clear();//SparseArray
postLine.removeAllViews();//RecyclerView
postList.clear();//ListArray postList
int postline2h=0;
int postline1h=0;
试一试{
邮政ps;
对于(int i=0;ipostline2h){
listOfLine2.put(listOfLine2.size(),ps);
postline2h+=ps.getHeight();
}否则{
postline1h+=ps.getHeight();
listOfLine1.put(listOfLine1.size(),ps);
}
}
int i=0;
布尔值firstnull,secondnull;
而(i!=listOfLine2.size()-1 | | i!=listOfLine1.size()-1){
if(listOfLine1.get(i)!=null){
firstnull=false;
add(listOfLine1.get(i));
清单1.删除(i);
}else firstnull=true;
if(listOfLine2.get(i)!=null){
secondnull=false;
add(listOfLine2.get(i));
清单2.删除(i);
}else secondnull=true;
if(secondnull和firstnull)中断;
i++;
}
postsAdapter.notifyDataSetChanged();
}捕获(例外e){
日志(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();
   }
}
public类PostsAdapter扩展了RecyclerView.Adapter{
私人ArrayList职位;
公共PostsAdapter(ArrayList postslist){
posts=postslist;
}
@凌驾
public int getItemCount(){
返回后。大小();
}
@凌驾
public PostsHolder onCreateViewHolder(视图组父级,int-viewType){
返回新的PostsHolder(新的LinearLayout(parent.getContext());
}
@凌驾
BindViewHolder上的公共无效(PostShoholder holder,内部位置){
保持器.设置杆(杆.获取(位置));
}
@凌驾
回收的公共空间(后支架支架){
super.onViewRecycled(支架);
holder.getPost().die();
}
}
onBindViewHolder post.setPost将向布局添加视图

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);
    }
}}
private void preparePosts(JSONArray posts){
listOfLine1.clear();//SparseArray
listOfLine2.clear();//SparseArray
postLine.removeAllViews();//RecyclerView
postList.clear();//ListArray postList
int postline2h=0;
int postline1h=0;
试一试{
邮政ps;
对于(int i=0;ipostline2h){
listOfLine2.put(listOfLine2.size(),ps);
postline2h+=ps.getHeight();
}否则{
postline1h+=ps.getHeight();
listOfLine1.put(listOfLine1.size(),ps);
}
}
int i=0;
布尔值firstnull,secondnull;
而(i!=listOfLine2.size()-1 | | i!=listOfLine1.size()-1){
if(listOfLine1.get(i)!=null){
firstnull=false;
add(listOfLine1.get(i));
清单1.删除(i);
}else firstnull=true;
if(listOfLine2.get(i)!=null){
secondnull=false;
add(listOfLine2.get(i));
清单2.删除(i);
}else secondnull=true;
if(secondnull和firstnull)中断;
i++;
}
postsAdapter.notifyDataSetChanged();
}捕获(例外e){
日志(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();
   }
}
public类PostsAdapter扩展了RecyclerView.Adapter{
私人ArrayList职位;
公共PostsAdapter(ArrayList postslist){
posts=postslist;
}
@凌驾
public int getItemCount(){
返回后。大小();
}
@凌驾
public PostsHolder onCreateViewHolder(视图组父级,int-viewType){
返回新的PostsHolder(新的LinearLayout(parent.getContext());
}
@凌驾
BindViewHolder上的公共无效(PostShoholder holder,内部位置){
保持器.设置杆(杆.获取(位置));
}
@凌驾
回收的公共空间(后支架支架){
super.onViewRecycled(支架);
holder.getPost().die();
}
}

onBindViewHolder post.setPost将把视图添加到布局中

尝试并检查替换行

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


尝试检查并更换您的线路

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


欢迎来到堆栈溢出。请通过链接了解如何提出有效的问题。发布java和xml文件的代码here@mdb_5203postedwelcome to stack overflow。请通过链接了解如何提出有效的问题。发布java和xml文件的代码here@mdb_5203张贴