在带有底部工作表行为的nestedscrollview中的RecyclerView

问题描述 投票:1回答:1

我正在制作一个应用程序,显示不同用户的帖子活动,如facebook。我制作了postList Activity,其中将显示用户名,帖子图片和帖子文字。还想在我的应用程序中实现like和comment功能。在评论文本视图中,底部图表将显示不同用户的评论列表。

问题是我使用了nestedscrollview底部表格行为。在nestedscroll视图中,有recler视图。

这是我的底片的xml布局

<android.support.v4.widget.NestedScrollView 
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/bottom_sheet1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/darker_gray"
android:fillViewport="true"
android:orientation="vertical"
app:behavior_hideable="true"
app:behavior_peekHeight="80dp"
app:layout_behavior="android.support.design.widget.BottomSheetBehavior">


<android.support.v7.widget.RecyclerView
    android:id="@+id/commentList"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />


    </android.support.v4.widget.NestedScrollView>

这是Post List xml

<android.support.design.widget.CoordinatorLayout 
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/main_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">

<ScrollView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fillViewport="true">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_margin="16dp">

        <android.support.v7.widget.RecyclerView
            android:id="@+id/post_list"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />

        <android.support.design.widget.FloatingActionButton
            android:id="@+id/addNewPost"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:layout_alignParentRight="true" />
    </RelativeLayout>
</ScrollView>

<include layout="@layout/bottom_sheet" />

这是postlist适配器

public class CustomAdapter extends RecyclerView.Adapter<ViewHolder> {

NestedScrollView bottom_sheet;
CoordinatorLayout mainLayout;

private BottomSheetBehavior mBottomSheetBehavior;

public CustomAdapter(Context context, ArrayList<Post> posts,NestedScrollView 
bottom_sheet,CoordinatorLayout mainLayout) {
    this.posts = posts;
    this.context = context;
    this.bottom_sheet=bottom_sheet;
    this.mainLayout=mainLayout;
}

@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.post_layout, parent, false);
    ViewHolder viewHolder = new ViewHolder(view);
    return viewHolder;
}

@Override
public void onBindViewHolder(final ViewHolder holder, int position) {

           mBottomSheetBehavior = BottomSheetBehavior.from(bottom_sheet);

    mBottomSheetBehavior.setBottomSheetCallback(new BottomSheetBehavior.BottomSheetCallback() {
        @Override
        public void onStateChanged(@NonNull View bottomSheet, int newState) {
            switch (newState) {
                case BottomSheetBehavior.STATE_HIDDEN:
                    break;
                case BottomSheetBehavior.STATE_EXPANDED: {
                }
                break;
                case BottomSheetBehavior.STATE_COLLAPSED: {
                }
                break;
                case BottomSheetBehavior.STATE_DRAGGING:
                    break;
                case BottomSheetBehavior.STATE_SETTLING:
                    break;
            }
        }
        @Override
        public void onSlide(@NonNull View bottomSheet, float slideOffset) {

        }
    });

    holder.comment.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            if (mBottomSheetBehavior.getState() != BottomSheetBehavior.STATE_EXPANDED) {
                mBottomSheetBehavior.setState(BottomSheetBehavior.STATE_EXPANDED);
            } else {
                mBottomSheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED);
            }
        }
    });


}
@Override
public int getItemCount() {
    return posts.size();
}

}

这是评论的适配器

public class CommentAdapter extends RecyclerView.Adapter<CommentViewHolder> {

Context context;

public CommentAdapter(Context context,ArrayList<Comment> comments) {
    this.comments = comments;
    this.context=context;
}

@Override
public CommentViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.comment_layout, parent, false);
    CommentViewHolder viewHolder = new CommentViewHolder(view);
    return viewHolder;
}

@Override
public void onBindViewHolder(CommentViewHolder holder, int position) {

    firebaseDatabase = FirebaseDatabase.getInstance();
    commentReference = firebaseDatabase.getReference().child("Comments");
    mAuth = FirebaseAuth.getInstance();
    uId = mAuth.getCurrentUser().getUid();

    final Comment comment = comments.get(position);

    holder.commentUName.setText("Numrah");
    holder.commentText.setText("hello");

    holder.addCommentBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Toast.makeText(context, "comment", Toast.LENGTH_SHORT).show();
        }
    });

}

@Override
public int getItemCount() {
    return comments.size();
}
}

PostList活动

公共类PostList扩展AppCompatActivity {

RecyclerView recyclerView;
ArrayList<Post> posts;
CustomAdapter customAdapter;
FloatingActionButton addPost;
FirebaseDatabase firebaseDatabase;
DatabaseReference postReference;
DatabaseReference likeReference;
DatabaseReference commentReference;
NestedScrollView bottomSheet;
CoordinatorLayout mainLayout;
private BottomSheetBehavior mBottomSheetBehavior;
RecyclerView commentRecyclerView;
ArrayList<Comment> comments;
CommentAdapter commentAdapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_post_list);

    bottomSheet = (NestedScrollView) findViewById(R.id.bottom_sheet1);
    mainLayout = (CoordinatorLayout) findViewById(R.id.main_layout);
    commentRecyclerView=bottomSheet.findViewById(R.id.commentList);
    comments = new ArrayList<>();
    RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(this);
    //layoutManager.setAutoMeasureEnabled(true);
    commentRecyclerView.setLayoutManager(layoutManager);
    commentRecyclerView.setNestedScrollingEnabled(false);
    commentAdapter = new CommentAdapter(this, comments);
    commentRecyclerView.setAdapter(commentAdapter);

    firebaseDatabase = FirebaseDatabase.getInstance();
    postReference = firebaseDatabase.getReference("Post");
    likeReference = firebaseDatabase.getReference("Likes");
    commentReference = firebaseDatabase.getReference("Comments");

    posts = new ArrayList<>();
    addPost = (FloatingActionButton) findViewById(R.id.addNewPost);
    recyclerView = (RecyclerView) findViewById(R.id.post_list);
    recyclerView.setLayoutManager(new LinearLayoutManager(this));
    customAdapter = new CustomAdapter(this, posts, bottomSheet, mainLayout);
    recyclerView.setAdapter(customAdapter);



    addPost.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            startActivity(new Intent(PostList.this, AddPost.class));

        }
    });

    postReference.addChildEventListener(new ChildEventListener() {
        @Override
        public void onChildAdded(DataSnapshot dataSnapshot, String s) {

            Post post = dataSnapshot.getValue(Post.class);
            posts.add(post);
            customAdapter.notifyDataSetChanged();
        }

        @Override
        public void onChildChanged(DataSnapshot dataSnapshot, String s) {

            Post post = dataSnapshot.getValue(Post.class);
            int indexOfItem = posts.indexOf(post);
            if (indexOfItem >= 0) {
                posts.set(indexOfItem, post);

            }
            customAdapter.notifyDataSetChanged();
        }

        @Override
        public void onChildRemoved(DataSnapshot dataSnapshot) {

        }

        @Override
        public void onChildMoved(DataSnapshot dataSnapshot, String s) {

        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });

}

@Override
public void onBackPressed() {
    mBottomSheetBehavior = BottomSheetBehavior.from(bottomSheet);
    if (mBottomSheetBehavior.getState() != BottomSheetBehavior.STATE_EXPANDED) {

        super.onBackPressed();

    } else {
        mBottomSheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED);

    }
}

}

android android-nestedscrollview
1个回答
1
投票

由于你的arraylist comments是空的(comments.size()是0)你的getItemCount()CommentAdapter正在返回0。因此,零行将被充气,您的recyclerView将为空白。因此,您的测试用例不会被执行要执行您的测试用例,请在CommentAdapter中尝试:

    @Override
    public int getItemCount() {
        return 5; // returning static no of items
     }
© www.soinside.com 2019 - 2024. All rights reserved.