Reputation: 339
I have an activity called navigation and two fragments called OneFragment, Description Fragment.
The navigation activity contains these two fragments as code show below:
navigation.java
public class navigation extends AppCompatActivity
implements NavigationView.OnNavigationItemSelectedListener {
private TabLayout tabLayout;
private ViewPager viewPager;
private int[] tabIcons = {
R.drawable.ic_newsfeed,
R.drawable.ic_livestream,
R.drawable.ic_matches,
R.drawable.ic_sort
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_navigation);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
drawer.setDrawerListener(toggle);
toggle.syncState();
NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
navigationView.setNavigationItemSelectedListener(this);
viewPager = (ViewPager) findViewById(R.id.viewpager);
setupViewPager(viewPager);
tabLayout = (TabLayout) findViewById(R.id.tabs);
tabLayout.setupWithViewPager(viewPager);
setupTabIcons();
}
private void setupTabIcons() {
tabLayout.getTabAt(0).setIcon(tabIcons[0]);
tabLayout.getTabAt(1).setIcon(tabIcons[1]);
tabLayout.getTabAt(2).setIcon(tabIcons[2]);
tabLayout.getTabAt(3).setIcon(tabIcons[3]);
}
private void setupViewPager(ViewPager viewPager) {
ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
adapter.addFrag(new OneFragment(),getString(R.string.newsfeed));
adapter.addFrag(new TwoFragment(), getString(R.string.livestream));
adapter.addFrag(new ThreeFragment(),getString(R.string.matches));
adapter.addFrag(new FourFragment(),getString(R.string.schedule));
viewPager.setAdapter(adapter);
}
class ViewPagerAdapter extends FragmentPagerAdapter {
private final List<Fragment> mFragmentList = new ArrayList<>();
private final List<String> mFragmentTitleList = new ArrayList<>();
public ViewPagerAdapter(FragmentManager manager) {
super(manager);
}
@Override
public Fragment getItem(int position) {
return mFragmentList.get(position);
}
@Override
public int getCount() {
return mFragmentList.size();
}
public void addFrag(Fragment fragment, String title) {
mFragmentList.add(fragment);
mFragmentTitleList.add(title);
}
@Override
public CharSequence getPageTitle(int position) {
return mFragmentTitleList.get(position);
}
}
@Override
public void onBackPressed() {
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
if (drawer.isDrawerOpen(GravityCompat.START)) {
drawer.closeDrawer(GravityCompat.START);
} else {
super.onBackPressed();
}
}
@SuppressWarnings("StatementWithEmptyBody")
@Override
public boolean onNavigationItemSelected(MenuItem item) {
// Handle navigation view item clicks here.
int id = item.getItemId();
if (id == R.id.share) {
// Handle the camera action
} else if (id == R.id.check) {
} else if (id == R.id.rateus) {
} else if (id == R.id.aboutus) {
}
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
drawer.closeDrawer(GravityCompat.START);
return true;
}
This is my Adapter class:
public class PostAdapter2 extends RecyclerView.Adapter<PostAdapter2.ViewHolder>{
public Context mContext;
public ArrayList<News_data> original_items = new ArrayList<>();
public ArrayList<News_data> filtered_items = new ArrayList<>();
// ItemFilter mFilters = new ItemFilter();
public PostAdapter2(Context mContext, ArrayList<News_data> postList) {
this.mContext = mContext;
this.original_items = postList;
this.filtered_items = postList;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.recycler_news, parent, false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
try {
final News_data post = filtered_items.get(position);
holder.txt_news_title.setText(post.getName_news());
holder.setItemClickListener(new ItemClickListener() {
@Override
public void onItemClick() {
//what to do to replace the OneFragment with the DescriptionFragment
}
});
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public int getItemCount() {
return filtered_items.size();
}
public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
Context c;
ItemClickListener itemClickListener;
TextView txt_news_title,txt_desc;
ImageView image_news;
public ViewHolder(View itemView) {
super(itemView);
txt_news_title = (TextView) itemView.findViewById(R.id.txt_news_title);
itemView.setOnClickListener(this);
}
@Override
public void onClick(View v) {
this.itemClickListener.onItemClick();
}
public void setItemClickListener(ItemClickListener itemClickListener)
{
this.itemClickListener=itemClickListener;
}
}
What I want to do is to replace the OneFragment with The DescriptionFragment on Recyclerview item click.
Upvotes: 1
Views: 1363
Reputation: 3454
Sadly you cannot replace Fragment
s inside ViewPager
, but you can use NestedFragment
to add a ChildFragment
to your main Fragment
like you do with Activity
.
Just define a FrameLayout
inside you OneFragment Layout
and call getChildFragmentManager
instead of getSupportFragmentManager
. For example:
Fragment descriptionFragment = new DescriptionFragment ();
FragmentTransaction transaction = getChildFragmentManager().beginTransaction();
transaction.add(R.id.nested_fragment_container, descriptionFragment ).commit();
For more info you can visit here:
https://developer.android.com/about/versions/android-4.2.html#NestedFragments
P.S: If you have more fragment than these two or you want your fragments to be stand alone you can use this library to get instagram like tabs:
https://github.com/ncapdevi/FragNav
Upvotes: 1