Load a recyclerview fragment on clicking another recyclerview fragment's specific item click using tabbed fragment?
Asked Answered
S

1

6

I have checked other answers and articles. But couldn't find what I am looking for. I might be missing something.

I have a tabbed activity which contains three fragments:

  1. FragmentHome (Tab 1),
  2. FragmentTwo (Tab 2),
  3. FragmentThree (Tab 3).

Now I want to load another Fragment ("FragmentAnother") on clicking HomeFragment's specific Item. Say, I want to load "FragmentAnother" (RecyclerViewFragment) on clicking "5th" item in HomeFragment (Recyclerview fragment). And I want to load a specific detailView for a specific item in HomeFragment. How to achieve this?

MainActivity.java

public class MainActivity extends AppCompatActivity {

private SectionsPagerAdapter mSectionsPagerAdapter;

private ViewPager mViewPager;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    // Create the adapter that will return a fragment for each of the three
    // primary sections of the activity.
    mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());

    // Set up the ViewPager with the sections adapter.
    mViewPager = (ViewPager) findViewById(R.id.container);
    mViewPager.setAdapter(mSectionsPagerAdapter);

    TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs);

    mViewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));
    tabLayout.addOnTabSelectedListener(new TabLayout.ViewPagerOnTabSelectedListener(mViewPager));


    FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
    fab.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                    .setAction("Action", null).show();
        }
    });

}


@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.menu_main, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();

    //noinspection SimplifiableIfStatement
    if (id == R.id.action_settings) {
        return true;
    }

    return super.onOptionsItemSelected(item);
}

public class SectionsPagerAdapter extends FragmentPagerAdapter {

    public SectionsPagerAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int position) {
       switch (position) {
           case 0:
               FragmentHome fragmentTabOne = new FragmentHome();
               return fragmentTabOne;
           case 1:
               FragmentTabTwo fragmentTabTwo = new FragmentTabTwo();
               return fragmentTabTwo;
           case 2:
               FragmentTabThree fragmentTabThree = new FragmentTabThree();
               return fragmentTabThree;
               default:
                   return null;
       }


    }

    @Override
    public int getCount() {
        // Show 3 total pages.
        return 3;
    }


    }
}

FragmentHome.java (Tab One or first tab)

public class FragmentHome extends android.support.v4.app.Fragment {
private RecyclerView homeRecyclerView;
private RecyclerView.Adapter homeListAdapter;

private ArrayList<HomeListItem> homeListItems;

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

    // Inflate the layout for this fragment
    View rootView = inflater.inflate(R.layout.fragment_home, container, false);

    homeRecyclerView = (RecyclerView) rootView.findViewById(R.id.homeRecyclerView);
    homeRecyclerView.setHasFixedSize(true);

    homeListItems = HomeListItemData.getItem();

    homeListAdapter = new HomeListRecyclerViewAdapter(homeListItems, getContext());
    homeRecyclerView.setAdapter(homeListAdapter);

    LinearLayoutManager llm = new LinearLayoutManager(getActivity());
    homeRecyclerView.setLayoutManager(llm);

    return rootView;
}

@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
}


}

HomeListItem.java

public class HomeListItem {
private int CardImageId;
private String Heading;
private String Description;

public HomeListItem(int cardImageId, String heading, String description) {
    this.CardImageId = cardImageId;
    Heading = heading;
    Description = description;
}

public String getHeading() {
    return Heading;
}

public String getDescription() {
    return Description;
}

public int getCardImageId() {
    return CardImageId;
}
}

HomeListData.java

public class HomeListItemData {
public static ArrayList<HomeListItem> getItem() {
    ArrayList<HomeListItem> homeListItemArrayList = new ArrayList<>();

    homeListItemArrayList.add(new HomeListItem(R.drawable.ic_launcher_background, "First 10 Reasons Why", "First 10 reasons accordig to"));
    homeListItemArrayList.add(new HomeListItem(R.drawable.ic_half_moon_and_star, "Second 10 Reasons Why", "Second 10 reasons short description"));
    homeListItemArrayList.add(new HomeListItem(R.drawable.ic_half_moon_and_star, "Third 14 Reasons Why", "Third 14 reasons short description"));
    homeListItemArrayList.add(new HomeListItem(R.drawable.ic_half_moon_and_star, "Forth 5 Reasons Why", "Forth 5 reasons short description"));
    homeListItemArrayList.add(new HomeListItem(R.drawable.ic_half_moon_and_star, "Fifth 12 Reasons Why", "Fifth 12 reasons Je suis content de savoir short description"));
    homeListItemArrayList.add(new HomeListItem(R.drawable.ic_half_moon_and_star, "Sixth 25 Reasons Why", "Sixth 25 reasons short description"));
    homeListItemArrayList.add(new HomeListItem(R.drawable.ic_half_moon_and_star, "Seventh 30 Reasons Why", "Seventh 30 reasons"));
    homeListItemArrayList.add(new HomeListItem(R.drawable.ic_half_moon_and_star, "Eighth 8 Reasons Why", "Eighth 8 reasons Je suis content de savoir short description"));
    homeListItemArrayList.add(new HomeListItem(R.drawable.ic_half_moon_and_star, "Ninth 34 Reasons Why", "Ninth 34 reasons Je suis content de savoir short description"));
    homeListItemArrayList.add(new HomeListItem(R.drawable.ic_half_moon_and_star, "Tenth 9 Reasons Why", "Tenth 9 reasons Je suis content de savoir short description"));
    homeListItemArrayList.add(new HomeListItem(R.drawable.ic_half_moon_and_star, "Eleventh 2 Reasons Why", "Eleventh 2 reasons Je suis content de savoir short description"));
    homeListItemArrayList.add(new HomeListItem(R.drawable.ic_half_moon_and_star, "Twelve 15 Reasons Why", "Twelve 15 reasons Je suis content de savoir short description"));
    homeListItemArrayList.add(new HomeListItem(R.drawable.ic_half_moon_and_star, "Thirteenth 17 Reasons Why", "Thirteenth 17 reasons Je suis content de savoir short description"));


    return homeListItemArrayList;
}
}

HomeListRecyclerViewAdapter

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

List<HomeListItem> homeListItems;
Context context;

public HomeListRecyclerViewAdapter(List<HomeListItem> homeListItems, Context context) {
    this.homeListItems = homeListItems;
    this.context = context;
}

@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

    View homeListViewHolder = LayoutInflater.from(parent.getContext())
            .inflate(R.layout.home_list_item, parent, false);

    return new ViewHolder(homeListViewHolder);
}

@Override
public void onBindViewHolder(ViewHolder holder, final int position) {
    final HomeListItem homeListItem = homeListItems.get(position);

    if (position==0){
 `      holder.cardImageView.setBackgroundResource(R.drawable.circle_background_green_blue_deep);

    } else if (position==1)

{holder.cardImageView.setBackgroundResource(R.drawable.circle_background_purple__ middle_islam_pro); } else if (position==2){

holder.cardImageView.setBackgroundColor(Color.parseColor("#FFC107"));
    } else if (position==3){
        holder.cardImageView.setBackgroundColor(Color.CYAN);
    }

    holder.cardImageView.setImageResource(homeListItem.getCardImageId());
    holder.headingTextView.setText(homeListItem.getHeading());
    holder.shortDescriptionTextView.setText(homeListItem.getDescription());

    //Load another fragment on Click a card
    holder.homeListCardViewRelativeLayout.setOnClickListener(new 
View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Toast.makeText(context, "You clicked " + position, 
Toast.LENGTH_SHORT).show();
        }
    });

}

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

public class ViewHolder extends RecyclerView.ViewHolder {
    public ImageView cardImageView;
    public TextView headingTextView;
    public TextView shortDescriptionTextView;
    public RelativeLayout homeListCardViewRelativeLayout;

    public ViewHolder(View itemView) {
        super(itemView);

        cardImageView = (ImageView) 
itemView.findViewById(R.id.cardImageView);
        headingTextView = (TextView) 
itemView.findViewById(R.id.headingTextView);
        shortDescriptionTextView = (TextView) 
itemView.findViewById(R.id.shortDescriptionTextView);

        homeListCardViewRelativeLayout = (RelativeLayout) 
itemView.findViewById(R.id.homeListCardItemRelativeLayoutId);
    }
}
}

activity main xml file

<android.support.design.widget.CoordinatorLayout 
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/main_content"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:context="com.hello.abc.activity.MainActivity">

<android.support.design.widget.AppBarLayout
    android:id="@+id/appbar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:theme="@style/AppTheme.AppBarOverlay">

    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_weight="1"
        android:layout_width="match_parent"
        android:background="?attr/colorPrimary"
        android:layout_height="?attr/actionBarSize"
        app:layout_scrollFlags="scroll|enterAlways"
        app:popupTheme="@style/AppTheme.PopupOverlay"
        app:title="@string/app_name">

    </android.support.v7.widget.Toolbar>

    <View
        android:id="@+id/toolbarDropShadow"
        android:layout_width="match_parent"
        android:layout_height="3dp"
        android:background="@drawable/toolbar_drop_shadow"/>


    <android.support.design.widget.TabLayout
        android:id="@+id/tabs"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:tabMaxWidth="0dp"
        app:tabGravity="fill"
        app:tabMode="fixed">

        <android.support.design.widget.TabItem
            android:id="@+id/tabItem"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Home" />

        <android.support.design.widget.TabItem
            android:id="@+id/tabItem2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Tab Two" />

        <android.support.design.widget.TabItem
            android:id="@+id/tabItem3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Tab Three" />

    </android.support.design.widget.TabLayout>
</android.support.design.widget.AppBarLayout>

<android.support.v4.view.ViewPager
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:layout_behavior="@string/appbar_scrolling_view_behavior" />

<android.support.design.widget.FloatingActionButton
    android:id="@+id/fab"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="end|bottom"
    android:layout_margin="@dimen/fab_margin"
    app:srcCompat="@android:drawable/ic_dialog_email" />

</android.support.design.widget.CoordinatorLayout>

Fragment Home xml file (First Tab)

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/relativeLayout"


android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.hello.abc.activity.MainActivity">

<ScrollView
android:paddingTop="9dp"
android:paddingBottom="9dp"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginBottom="?attr/actionBarSize">

<android.support.v7.widget.RecyclerView
    android:id="@+id/homeRecyclerView"
    android:background="@color/backgroundColor"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

</android.support.v7.widget.RecyclerView>
</ScrollView>
</RelativeLayout>

Home List Item xml file

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:card_view="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content">

<android.support.v7.widget.CardView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="#FFFFFF"
    card_view:cardCornerRadius="@dimen/cardview_default_radius">

    <RelativeLayout
        android:id="@+id/homeListCardItemRelativeLayoutId"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:clickable="true"
        android:foreground="?android:selectableItemBackground"
        android:orientation="vertical"
        android:padding="12dp">

        <ImageView
            android:id="@+id/cardImageView"
            android:layout_width="64dp"
            android:layout_height="64dp"
            android:layout_marginRight="10dp"
            android:background="@drawable/circle_bg_islam_pro_green"
            android:padding="13dp"
            android:src="@drawable/ic_launcher_background" />

        <TextView
            android:id="@+id/headingTextView"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentEnd="true"
            android:layout_alignParentRight="true"
            android:layout_alignTop="@+id/cardImageView"
            android:layout_marginTop="-5dp"
            android:layout_toEndOf="@+id/cardImageView"
            android:layout_toRightOf="@+id/cardImageView"
            android:text="Heading"

android:textAppearance="@style/Base.TextAppearance.AppCompat.Large" />

        <TextView
            android:id="@+id/shortDescriptionTextView"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentEnd="true"
            android:layout_alignParentRight="true"
            android:layout_below="@+id/headingTextView"
            android:layout_toEndOf="@id/cardImageView"
            android:layout_toRightOf="@+id/cardImageView"
            android:text="This is short description"
            android:textColor="@color/grayDark" />
    </RelativeLayout>
</android.support.v7.widget.CardView>
</RelativeLayout>

Now my another fragment class which I want to load on click HomeFragment item click.

public class FragmentAnother extends Fragment {
private RecyclerView homeRecyclerView;
private RecyclerView.Adapter homeListAdapter;

private ArrayList<HomeListItem> homeListItems;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup 
container, @Nullable Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View rootView = inflater.inflate(R.layout.fragment_home, container, 
false);

    homeRecyclerView = (RecyclerView) 
rootView.findViewById(R.id.homeRecyclerView);
    homeRecyclerView.setHasFixedSize(true);

    homeListItems = FragmentAnotherItemData.getItem();

    homeListAdapter = new HomeListRecyclerViewAdapter(homeListItems, 
getContext());
    homeRecyclerView.setAdapter(homeListAdapter);

    LinearLayoutManager llm = new LinearLayoutManager(getActivity());
    homeRecyclerView.setLayoutManager(llm);

    return rootView;
}

@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
}
}

Another Fragment Data Class

public class HomeListItemData {
public static ArrayList<HomeListItem> getItem() {
ArrayList<HomeListItem> homeListItemArrayList = new ArrayList<>();

homeListItemArrayList.add(new 
HomeListItem(R.drawable.ic_launcher_background, "First 4 Reasons Why", 
"First 4 reasons accordig to"));
homeListItemArrayList.add(new HomeListItem(R.drawable.ic_half_moon_and_star, 
"Second 8 Reasons Why", "Second 8 reasons short description"));
homeListItemArrayList.add(new HomeListItem(R.drawable.ic_half_moon_and_star, 
"Third 24 Reasons Why", "Third 24 reasons short description"));
homeListItemArrayList.add(new HomeListItem(R.drawable.ic_half_moon_and_star, 
"Forth 15 Reasons Why", "Forth 15 reasons short description"));
homeListItemArrayList.add(new HomeListItem(R.drawable.ic_half_moon_and_star, 
"Fifth 10 Reasons Why", "Fifth 10 reasons short description"));
homeListItemArrayList.add(new HomeListItem(R.drawable.ic_half_moon_and_star, 
"Sixth 25 Reasons Why", "Sixth 25 reasons short description"));
homeListItemArrayList.add(new HomeListItem(R.drawable.ic_half_moon_and_star, 
"Seventh 30 Reasons Why", "Seventh 30 reasons Je suis content de savoir 
short description"));
homeListItemArrayList.add(new HomeListItem(R.drawable.ic_half_moon_and_star, 
"Eighth 8 Reasons Why", "Eighth 8 reasons Je suis content de savoir short 
description"));
homeListItemArrayList.add(new HomeListItem(R.drawable.ic_half_moon_and_star, 
"Ninth 34 Reasons Why", "Ninth 34 reasons Je suis content de savoir short 
description"));
homeListItemArrayList.add(new HomeListItem(R.drawable.ic_half_moon_and_star, 
"Tenth 9 Reasons Why", "Tenth 9 reasons Je suis content de savoir short 
description"));
homeListItemArrayList.add(new HomeListItem(R.drawable.ic_half_moon_and_star, 
"Eleventh 2 Reasons Why", "Eleventh 2 reasons Je suis content de savoir 
short description"));
homeListItemArrayList.add(new HomeListItem(R.drawable.ic_half_moon_and_star, 
"Twelve 15 Reasons Why", "Twelve 15 reasons Je suis content de savoir short 
description"));

return homeListItemArrayList;
 }
 }
Swedish answered 11/11, 2017 at 23:16 Comment(0)
P
0

If I have got the question right.

Have you tried adding a fragment to your "FragmentHome.java" something like below? use this code where you are showing Toast in Recyclerview adapter.

  //Load another fragment on Click a card
        holder.homeListCardViewRelativeLayout.setOnClickListener(new 
    View.OnClickListener() {
            @Override
            public void onClick(View view) {
                FragmentTransaction fragmentTransaction=getChildFragmentManager().beginTransaction();
        fragmentTransaction.add(R.id.relativeLayout,new DetailFragment());
        fragmentTransaction.commit();
            }
        });

Above code will add a fragment into your "FragmentHome.java" more details see Here.

If you want to transfer data from one fragment to another see Here

Penny answered 29/1, 2018 at 10:14 Comment(3)
It shows "can not resolve method getChildFragmentManager()". Is this because I'm extending an adapter?Swedish
getChildFragmentManager() is used inside a nested fragment you can try using getFragmentManager();.Penny
Still same error. "Can not resolve method getFragmentManager()"Swedish

© 2022 - 2024 — McMap. All rights reserved.