Recyclerview折叠或展开,我在这一步做什么?

时间:2016-09-22 06:16:42

标签: android android-recyclerview android-animation

代码:

public class TimelineFragment extends Fragment {


    PostViewAdapter postViewAdapter;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View baseView = inflater.inflate(R.layout.fragment_timeline, container, false);
        ArrayList<Postitem> listitem = new ArrayList<>();

        RecyclerView rvList = (RecyclerView) baseView.findViewById(R.id.rv_list);

        for (int i = 0; i<30; i++) {
            Postitem item = new Postitem();
             listitem.add(i, item);
        }

        RecyclerView recyclerView = (RecyclerView) baseView.findViewById(R.id.rv_list);
        recyclerView.setLayoutManager(new LinearLayoutManager(getActivity(), LinearLayoutManager.VERTICAL, false));

        postViewAdapter = new PostViewAdapter();
        recyclerView.setAdapter(postViewAdapter);


        return baseView;
    }
    class PostViewAdapter extends RecyclerView.Adapter<PostViewHolder> {

        @Override
        public PostViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
            View baseView = getActivity().getLayoutInflater().inflate(R.layout.item_post, parent, false);

            PostViewHolder postViewHolder = new PostViewHolder(baseView);
            return postViewHolder;
        }

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

            ViewGroup.LayoutParams params = new RecyclerView.LayoutParams(
                    ViewGroup.LayoutParams.MATCH_PARENT, 200
            );
            holder.itemView.setLayoutParams(params);

            ViewGroup.LayoutParams params_open = new RecyclerView.LayoutParams(
                    ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT
            );
            holder.itemView.setLayoutParams(params);
        }

        @Override
        public int getItemCount() {
            return 30;
        }
    }

    class PostViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

        public ImageView iv_red, iv_yellow;

        public PostViewHolder(View itemView) {
            super(itemView);
            iv_yellow = (ImageView) itemView.findViewById(R.id.iv_yellow);
            iv_red = (ImageView) itemView.findViewById(R.id.iv_red);
            iv_red.setOnClickListener(this);
        }

        @Override
        public void onClick(View view) {
            final int position = getLayoutPosition();
        }
    }
}

这些代码适用于Fragment上的 Recyclerview

显示30 post_item。

你需要注意的是这个。

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

            ViewGroup.LayoutParams params = new RecyclerView.LayoutParams(
                    ViewGroup.LayoutParams.MATCH_PARENT, 200
            );
            holder.itemView.setLayoutParams(params);

            ViewGroup.LayoutParams params_open = new RecyclerView.LayoutParams(
                    ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT
            );
            holder.itemView.setLayoutParams(params);
        }

我为了折叠或展开而制作了这个。

我想在每个itemview中使用它,所以我想制作像折叠或展开每个 itemview 的效果。

我以为我必须在iv_red上设置onClickListener,所以我做了

        @Override
    public void onClick(View view) {
        final int position = getLayoutPosition();
    }

但我不知道在那之后我做了什么。

谁有个主意?请帮帮我

修改

抱歉,我错过了很多东西。现在我正在制作从服务器提供数据的android应用程序。

来自服务器的数据就像{“text”:“blahblah”,“image”:SomethingImageUrl“}。我想在RecyclerView ListLayout中显示这些数据。

但实际上我想要的是ListLayout的项目仅显示文本,最终用户点击显示的文本,hiden的图像显示给该用户。即

就像其他应用程序(如instagram或facebook)看到更多功能。

问题是如何为Recyclerview的每个项目设置onclicklistener,以应用LayoutParams。即使我将OnclickListener添加到我的PostViewHolder中,我也不知道了。

1 个答案:

答案 0 :(得分:0)

如果要快速解决问题,可以在项目中添加一个外部库。 在互联网上搜索,我发现可以在github上找到一个图书馆:

https://github.com/Ramotion/folding-cell-android

首先将此代码放在您的Grandle中:

implementation 'com.ramotion.foldingcell:folding-cell:1.2.3'

最后一步一步按照主页上显示的说明进行操作。