Java RecyclerView GridLayoutManager和动态行高
我想在RecyclerView中创建如下内容: 但是,我明白了: 有没有办法通过RecyclerView实现这一点 init: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
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张贴