我在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;
}
}
在您的情况下,您只需对点击Recyclerview
项的按钮进行API调用即可。当您收到服务器的响应时更新它,并调用adapter。notifyItemChanged(ItemPositionAdapter)
。
您不需要重新创建活动/片段。
不要把这当作一个答案,而是对你的问题的一个暗示性的评论(因为我还不能评论)。如果我理解正确,您希望在单击按钮时刷新布局,为什么不使用滑动刷新布局并覆盖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开始。能否有人帮助解决这一点和什么改变要做。提前谢谢!!
单击时的卡片视图正在工作。但回收器视图的区域不可单击。如何使其可点击,以便捕获卡片视图的事件。