用片段将RecyclerView中的OnClick替换视图

时间:2019-04-26 21:30:20

标签: java android android-fragments android-recyclerview

在视图的RecyclerView中单击该视图后,我正在尝试将其替换为详细视图。 问题在于,单击视图时,片段通常会在单击的视图上方或下方插入自身。理想情况下,在所附图像中看到的绿色片段会将视图替换为其相应的日期。

Emulator Screenshot

我尝试在ListView而不是RecyclerView中进行这项工作,但结果完全相同。

下面是RecyclerView.Adapter

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

        holder.nameView.setText(shows.get(position).getName());
        holder.staffView.setText(shows.get(position).getWorkSchedule());
        holder.dateView.setText(shows.get(position).getDate());
        holder.linearLayout.setOnClickListener(this);
        holder.linearLayout.setTag((int)position);
    }

    @Override
    public int getItemCount() {

        return shows.size();
    }

    @Override
    public void onClick(View v) {
        int eventId = shows.get((int) v.getTag()).getEventId();
        String date = shows.get((int) v.getTag()).getDate();

        DetailedEvent fragment = new DetailedEvent();
        Bundle bundle = new Bundle();
        v.findViewById(R.id.progress_bar).setVisibility(View.VISIBLE);
        Observable<EventStats> eventStats = dag.apiCaller().fetchOneEventStats(eventId);
        dag.apiCaller().fetchEventSnapshot(eventId).observeOn(AndroidSchedulers.mainThread()).subscribeOn(Schedulers.io())
                .zipWith(dag.apiCaller().fetchOneEventStats(eventId), new BiFunction<EventSnapshot, EventStats, Object>() {
                    @Override
                    public Object apply(EventSnapshot eventSnapshot, EventStats eventStats) throws Exception {
                        bundle.putString("sold", (eventSnapshot.getRevenueProducingTickets() + "/" + eventSnapshot.getCapacity()));
                        bundle.putString("description", eventStats.getDescription());
                        bundle.putString("name", eventSnapshot.getName());
                        bundle.putString("date", date);
                        fragment.setArguments(bundle);
                        FragmentTransaction fTrans = fragMan.beginTransaction()
                                .setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_right, 0, R.anim.slide_out_right);
                        fTrans.replace(R.id.linear_layout, fragment).addToBackStack(fragment.toString()).commit();
                        v.findViewById(R.id.progress_bar).setVisibility(View.INVISIBLE);
                        return bundle;
                    }
                }).subscribe();
    }

我知道已经问过这个问题的版本,但是我找不到任何资源来用片段代替视图,而不是用片段或活动等代替片段。

1 个答案:

答案 0 :(得分:0)

我想指出的是,我发现您基本上是在尝试对已单击的项目使用不同的视图。我自己也有同样的想法。您还在列表项中显示进度条吗?

更改视图本身会破坏整个想法,即拥有一些可用于新信息的视图。是不是(我仍然想尝试)

可能我建议在所有视图中都已经有了所需的内容,然后公开或隐藏它或插入新信息。这似乎是您在使用进度条所做的事情?记住,视图中什么也没有显示,什么也没有显示,但是确实占用了空间。

另一件事是,在回收视图时更新进度条或执行任何动画可能会给您带来麻烦。我喜欢您的推理,它是您的视图,您可以根据需要进行操作:),但是回收者视图可能有另一个计划。