当前位置: 首页 > 知识库问答 >
问题:

如何重新加载片段从回收器视图内选项卡布局与视图寻呼机?[复制]

余天宇
2023-03-14

我在StackOverflow上搜索了各种各样的答案,但找不到类似的答案。我知道如何刷新片段,但我不知道如何刷新实际上在选项卡布局中的片段。我有一个活动,我用viewpager实现了tablayout。我在tablayout的一个片段中看到了recyclerview。在“回收者”视图中,我有一个按钮可以重新加载页面。但问题是我重新加载了整个活动,然后看到了第一个选项卡。而recyclerview片段位于第二个选项卡中。那么,我如何从recyclerview重新加载片段,而不让完整的活动刷新呢。如果我刷新完整的活动,那么第一个布局将再次出现在前屏幕上,用户将不得不再次滑动到第二个选项卡,这是不可取的。这是我的代码recylerview适配器的片段的第二个标签

    public class Recieved_Reviews_adapter extends RecyclerView.Adapter<Recieved_Reviews_adapter.ViewHolder>
{

Context context;
ArrayList<reviews_model> arraylist_reviews_models;



        public Recieved_Reviews_adapter(Context context, ArrayList<reviews_model> reviews_models) {
            this.context=context;
            this.arraylist_reviews_models = reviews_models;




        }

        @Override
        public Recieved_Reviews_adapter.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
            View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.cardview__recieved_reviews, viewGroup, false);
            return new ViewHolder(view);


        }

        @Override
        public void onBindViewHolder(final Recieved_Reviews_adapter.ViewHolder viewHolder, int i) {


            viewHolder.imageView.setImageResource(arraylist_reviews_models.get(i).getReview_images());
            viewHolder.reviewers_name.setText(" "+ arraylist_reviews_models.get(i).getReviewer_name());
            viewHolder.reviews.setText("\" "+ arraylist_reviews_models.get(i).getReviews()+"\"");
            viewHolder.reviews_ratingbar.setRating(arraylist_reviews_models.get(i).getReviews_rating());

    viewHolder.img_btn_reply.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            viewHolder.img_btn_reply.setVisibility(View.GONE);
            EditText et_reply= new EditText(context);
            et_reply.setHint("Reply");
            Button btn_sumbit= new Button(context);
            btn_sumbit.setText("Submit");
            btn_sumbit.setGravity(Gravity.CENTER);
            btn_sumbit.setBackgroundColor(context.getResources().getColor(R.color.colorPrimary));
          btn_sumbit.setTextColor(context.getResources().getColor(R.color.TextColorWhite));
            LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(120, 40);
            params.setMargins(20, 20, 20, 20);
            params.gravity=Gravity.CENTER;
            btn_sumbit.setLayoutParams(params);

          et_reply.setGravity(Gravity.CENTER);
            viewHolder.linearLayout_received_reviews.addView(et_reply,viewHolder.linearLayout_received_reviews.getChildCount());
            viewHolder.linearLayout_received_reviews.addView(btn_sumbit);

            btn_sumbit.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {


                           //Refreshing base activity rather 
                            ((Reviews)context).finish();
                            context.startActivity(((Reviews)context).getIntent());

                        });
        }

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

        }



        public class ViewHolder extends RecyclerView.ViewHolder {
    CircleImageView imageView;
    RatingBar reviews_ratingbar;
    TextView reviewers_name;
    TextView reviews;
    LinearLayout linearLayout_received_reviews;
    ImageButton img_btn_reply;
    Button submit;
            public ViewHolder(View view) {
                super(view);
                imageView=(CircleImageView) view.findViewById(R.id.img_review);
                imageView.setBorderColor(context.getResources().getColor(R.color.darkgrey));
                reviews_ratingbar=(RatingBar)view.findViewById(R.id.ratingbar_reviews);
                reviewers_name=(TextView)view.findViewById(R.id.tv_reviewer_name);
                reviews=(TextView) view.findViewById(R.id.tv_the_reviews);
    img_btn_reply =(ImageButton)view.findViewById(R.id.img_btn_received_review_reply);
            linearLayout_received_reviews=(LinearLayout)view.findViewById(R.id.linear_layout_recieved_reviews);


            }

        }



    }

这是我的活动代码:

public class Reviews extends AppCompatActivity {


    ViewPager simpleViewPager;
    TabLayout tabLayout;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_reviews);

        init();
        listener();

    }



    private void init() {
        //this method initializes all the views

        simpleViewPager = (ViewPager) findViewById(R.id.simpleViewPager);
        tabLayout = (TabLayout) findViewById(R.id.simpleTabLayout);
        TabLayout.Tab firstTab = tabLayout.newTab();
        firstTab.setText("Given");
        TabLayout.Tab secondTab = tabLayout.newTab();
        secondTab.setText("Recieved");
        tabLayout.addTab(firstTab);
        tabLayout.addTab(secondTab);
        tabLayout.setTabGravity(TabLayout.GRAVITY_FILL);
        PagerAdapter adapter = new PagerAdapter(getSupportFragmentManager(), tabLayout.getTabCount());
        simpleViewPager.setAdapter(adapter);
        simpleViewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));


    }











    private void listener() {
        //this method sets onclick on tab

        tabLayout.addOnTabSelectedListener(new TabLayout.ViewPagerOnTabSelectedListener(simpleViewPager));

    }

这是我的viewpager/tablayout页面适配器:

public class PagerAdapter extends FragmentStatePagerAdapter {
    int mNumOfTabs;

    public PagerAdapter(FragmentManager fm, int NumOfTabs) {
        super(fm);
        this.mNumOfTabs = NumOfTabs;
    }

    @Override
    public Fragment getItem(int position) {

        switch (position) {
            case 0:
                Given_reviews tab1 = new Given_reviews();
                return tab1;
            case 1:
                Received_reviews tab2 = new Received_reviews();
                return tab2;

            default:
                return null;
        }
    }

    @Override
    public int getCount() {
        return mNumOfTabs;
    }
}public class PagerAdapter extends FragmentStatePagerAdapter {
    int mNumOfTabs;

    public PagerAdapter(FragmentManager fm, int NumOfTabs) {
        super(fm);
        this.mNumOfTabs = NumOfTabs;
    }

    @Override
    public Fragment getItem(int position) {

        switch (position) {
            case 0:
                Given_reviews tab1 = new Given_reviews();
                return tab1;
            case 1:
                Received_reviews tab2 = new Received_reviews();
                return tab2;

            default:
                return null;
        }
    }

    @Override
    public int getCount() {
        return mNumOfTabs;
    }
}

共有2个答案

张光辉
2023-03-14

在您的情况下,您只需对点击Recyclerview项的按钮进行API调用即可。当您收到服务器的响应时更新它,并调用adapter。notifyItemChanged(ItemPositionAdapter)

您不需要重新创建活动/片段。

景元徽
2023-03-14

不要把这当作一个答案,而是对你的问题的一个暗示性的评论(因为我还不能评论)。如果我理解正确,您希望在单击按钮时刷新布局,为什么不使用滑动刷新布局并覆盖onRefresh方法,在该方法中,您可以执行API调用和notifyDataSetChanged()。

 类似资料:
  • 我的应用程序包含两个选项卡,在两个选项卡内每个选项卡有4-5个嵌套片段,在嵌套片段内addtobackstack不工作?我怎样才能将嵌套片段添加到backstack中,因为当我在嵌套片段中单击后退按钮时,我的应用程序正在关闭,这意味着它正在调用super。onBackKeyPressed方法。

  • 我想在垂直视图页中实现一个recyclerview。我当前的布局如下所示 如果我从Fragment1滑动到Fragment2,一切正常。我可以在回收器视图中上下滚动。如果我尝试滑动/滚动回Fragment1,就会出现问题。 如果用户已滚动到回收器视图的顶部,我想将下一个“向上”滚动事件转发到垂直视图页页面。我尝试过重写 方法,但遗憾的是仍然没有成功。有什么想法吗?感谢您的帮助:)

  • 这是我的活动: 卡片xml 活动xml 这是我的自定义适配器 我已经看了很多关于如何让它工作的指南,但它仍然不起作用。有人知道发生了什么事吗?我的版本是25.0。1,并导入所有模块。但它并没有在布局中添加一张卡片。

  • 我有一个recyclerview,我用itemtouchhelper类给它添加了swipe,它工作得很好,在布局中有两个视图,前台视图在bacjground层上滑动,问题是我希望前台视图在滑动后获得上一个位置,就像在三星手机中进行呼叫的滑动效果一样。我可以在刷卡后拨打notifyitemchanged来实现这一点。但我只工作了一次,如果我再次在该项上滑动,视图不会恢复,这是我的itemtouchh

  • 当点击fab时,snack bar出现,为此我必须使用协调器布局将fab水平移动到snack bar上方。但现在回收器视图的前几个项目是不可见的。它只从项目3开始。能否有人帮助解决这一点和什么改变要做。提前谢谢!!

  • 单击时的卡片视图正在工作。但回收器视图的区域不可单击。如何使其可点击,以便捕获卡片视图的事件。