0

I am making an app with three tabs, each tab is having a recyclerview with two text, i want the user to be able to click on any recyclerview item and the text in that item should be passed to a new activity.

This is an image of how the app looks like.

Here is my code for MainActivity

public class MainActivity extends AppCompatActivity {

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

    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    // Get the ViewPager and set it's PagerAdapter so that it can display items
    ViewPager viewPager = (ViewPager) findViewById(R.id.viewpager);
    PagerAdapter pagerAdapter =
            new PagerAdapter(getSupportFragmentManager(), MainActivity.this);
    viewPager.setAdapter(pagerAdapter);

    // Give the TabLayout the ViewPager
    TabLayout tabLayout = (TabLayout) findViewById(R.id.tab_layout);
    tabLayout.setupWithViewPager(viewPager);

    // Iterate over all tabs and set the custom view
    for (int i = 0; i < tabLayout.getTabCount(); i++) {
        TabLayout.Tab tab = tabLayout.getTabAt(i);
        tab.setCustomView(pagerAdapter.getTabView(i));
    }

}


@Override
public void onResume() {
    super.onResume();
}
@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) {
    int id = item.getItemId();

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

    return super.onOptionsItemSelected(item);
}

class PagerAdapter extends FragmentPagerAdapter {

    String tabTitles[] = new String[] { "Tab 1", "Tab 2", "Tab 3" };
    Context context;

    public PagerAdapter(FragmentManager fm, Context context) {
        super(fm);
        this.context = context;
    }

    @Override
    public int getCount() {
        return tabTitles.length;
    }

    @Override
    public Fragment getItem(int position) {

        switch (position) {
            case 0:
                return new OneFragment();
            case 1:
                return new TwoFragment();
            case 2:
                return new ThreeFragment();
        }

        return null;
    }

    @Override
    public CharSequence getPageTitle(int position) {
        // Generate title based on item position
        return tabTitles[position];
    }

    public View getTabView(int position) {
        View tab = LayoutInflater.from(MainActivity.this).inflate(R.layout.custom_tab, null);
        TextView tv = (TextView) tab.findViewById(R.id.custom_text);
        tv.setText(tabTitles[position]);
        return tab;
    }

}

}

this is code for one of my Fragments

public class OneFragment extends Fragment {

public OneFragment() {
    // Required empty public constructor
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View rootView = inflater.inflate(R.layout.fragment_one, container, false);

    RecyclerView rv = (RecyclerView) rootView.findViewById(R.id.rv_recycler_view);
    rv.setHasFixedSize(true);
    MyAdapter adapter = new MyAdapter(new String[]{"1 Grace", "test two", "test three", "test four", "test five", "test six", "test seven"});
    rv.setAdapter(adapter);

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

    return rootView;
}

public class ContentAdapter extends RecyclerView.Adapter<ContentAdapter.ViewHolder> {
    private static final int LENGTH = 50;

    public ContentAdapter() {
    }

    public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

        public ViewHolder(LayoutInflater inflater, ViewGroup parent) {
            super(inflater.inflate(R.layout.singleitemview, parent, false));
        }

        @Override
        public void onClick(View v) {
            Intent intent = new Intent(getActivity(), SingleItemView.class);
            Toast.makeText(getActivity(),
                    "Your Message", Toast.LENGTH_LONG).show();
            startActivity(intent);
        }
    }

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

        ViewHolder viewHolder = new ViewHolder(LayoutInflater.from(parent.getContext()), parent);
        return viewHolder;

    }

    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
    }

    @Override
    public int getItemCount() {
        return LENGTH;
    }
}

}

And i also have a ViewHolder class

public class ViewHolder extends RecyclerView.ViewHolder {
public ViewHolder(LayoutInflater inflater, ViewGroup parent) {
    super(inflater.inflate(R.layout.singleitemview, parent, false));
    itemView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Context context = v.getContext();
            Intent intent = new Intent(context, SingleItemView.class);
            context.startActivity(intent);
        }
    });
}

}

Now i want to open SingleItemView.class to display items on the recycler view

Please Help Me

winfred adrah
  • 428
  • 6
  • 18

2 Answers2

2

pass in intent extras.there are several methods available like putString, putLong, putXXX etc. if it is your custom class then implement serialize interface and then put data.and in respective activity get it by using getIntent.getExtras("pass same key that you use when putting data into extras"). and you can get your desired data.

Hardik Mehta
  • 867
  • 1
  • 12
  • 20
  • Thank you for the answer, but my SecondActivity can not even open or get a toast to work, if only i can get the activity to open, then passing the data will become easy – winfred adrah Nov 12 '16 at 16:54
2

You can pass the data set into the adapter constructor and reference the data set whenever an item is clicked. Most of the trick is inside the ViewHolder implementation. Assuming that the data set contains String values, it should look more or less like this:

public class ViewHolder extends RecyclerView.ViewHolder {
  public ViewHolder(LayoutInflater inflater, ViewGroup parent) {
    super(inflater.inflate(R.layout.singleitemview, parent, false));
    itemView.setOnClickListener(new View.OnClickListener() {

      @Override
      public void onClick(View v) {
        int position = getAdapterPosition();

        Context context = v.getContext();
        Intent intent = new Intent(context, SingleItemView.class);
        intent.putExtra("com.package.sample.ITEM_DATA", mDataset.get(position));
        context.startActivity(intent);
      }
    });
  }
}
JD Hernandez
  • 1,785
  • 1
  • 20
  • 29