0

I need a help to pass tab title to my detail activity on click item recyclerview. then i want to show that title as actionbar title

this my tab with recyclerview : enter image description here

and after i click the item on cardview they will show detail activity and im going to show tabtile on actionbar title :

enter image description here so the title is based on tab (categories) that contain a recylerview. for information , i use a pager adapter to show title, and i use adapter with my recycler view. so i should pass the title to adapter right?

mainactivity (show tab and cardview) code:

    class PagerAdapter extends FragmentPagerAdapter {

    String tabTitles[] = new String[] { "Terbaru","Pilihan", "Prediksi", "Inggris", "Spanyol","Italy","Jerman","Prancis","Indonesia"};
    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 BlankFragment();
            case 1:
                return new EditorFragment();
            case 2:
                return new PrediksiFragment();
            case 3:
                return new InggrisFragment();
            case 4:
                return new SpanyolFragment();
            case 5:
                return new ItalyFragment();
            case 6:
                return new JermanFragment();
            case 7:
                return new PrancisFragment();
            case 8:
                return new IndonesiaFragment();            }
        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;
    }

}

my adapter with onclick cardview to detail activity:

    public MyAdapter.MyViewHolder onCreateViewHolder(ViewGroup parent,
                                                 int viewType) {
    mContext = parent.getContext();
    // create a new view
    View v = LayoutInflater.from(parent.getContext())
            .inflate(R.layout.card_item, parent, false);
    // set the view's size, margins, paddings and layout parameters
    MyViewHolder vh = new MyViewHolder(v);
    return vh;
}

@Override
public void onBindViewHolder(MyAdapter.MyViewHolder holder, final int position) {
    Glide.with(mContext).load(String.valueOf(coba.get(position).getBetterFeaturedImage().getMediaDetails().getSizes().getMedium().getSourceUrl()))
            .thumbnail(0.8f)
            .override(220,220)
            .crossFade()
            .diskCacheStrategy(DiskCacheStrategy.ALL)
            .into(holder.mImgPost);
    holder.mTextView.setText(Html.fromHtml(String.valueOf(coba.get(position).getTitle().getRendered())));
 //   holder.mDetView.setText(Html.fromHtml(String.valueOf(coba.get(position).getContent().getRendered())));
//    holder.mDetView.setText(String.valueOf(coba.get(position).getSlug()));
    Locale locale= new Locale("id","ID");
    SimpleDateFormat sourceFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
    SimpleDateFormat destFormat = new SimpleDateFormat("dd-MMM-yyyy",locale); //here 'a' for AM/PM
    Date date = null;
    try {
        date = sourceFormat.parse(String.valueOf(coba.get(position).getDate()));
    } catch (ParseException e) {
        e.printStackTrace();
    }
    final String formattedDate = destFormat.format(date);
    holder.mVerView.setText(formattedDate);
    holder.mCardView.setOnClickListener(new View.OnClickListener(){
        @Override
        public void onClick(View v){
            Intent intent = new Intent(v.getContext(),DetailBerita.class);
            intent.putExtra("Gambar",String.valueOf(coba.get(position).getBetterFeaturedImage().getMediaDetails().getSizes().getMedium().getSourceUrl()));
            intent.putExtra("Content",String.valueOf(coba.get(position).getContent().getRendered()));
            intent.putExtra("Judul",String.valueOf(coba.get(position).getTitle().getRendered()));
            intent.putExtra("Tanggal",formattedDate);
            intent.putExtra("Link",String.valueOf(coba.get(position).getLink()));
            intent.putExtra("Tags",String.valueOf(coba.get(position).getTags()));
            v.getContext().startActivity(intent);
            System.out.println("Clicked");
        }
    });
}

my sample frament to load recycler view:

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

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


    private void loadJSON(){
        final ProgressDialog loading = ProgressDialog.show(getActivity(),"Memuat Berita","Harap tunggu..",false,false);
        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl("http://www.sumberbola.com/wp-json/wp/")
                .addConverterFactory(GsonConverterFactory.create())
                .build();
        RequestSumbol request = retrofit.create(RequestSumbol.class);
        Call<List<Coba>> call = request.getPostDet();
        call.enqueue(new Callback<List<Coba>>() {
            @Override
            public void onResponse(Call<List<Coba>> call, Response<List<Coba>> response) {
                try {
                    List<Coba> jsonResponse = response.body();
                    data= new ArrayList<>();
                    data.addAll(jsonResponse);
                    adapter = new MyAdapter(data);
                    adapter.notifyDataSetChanged();
                    recyclerView.setAdapter(adapter);
                    loading.dismiss();
//                    bar.setVisibility(View.GONE);
                    Log.i("HASIL", "onResponse: "+data);
                }catch (Exception e) {
                    Log.d("onResponse", "There is an error");
                    e.printStackTrace();
                }
            }

            @Override
            public void onFailure(Call<List<Coba>> call, Throwable t) {
                Log.d("Error",t.getMessage());
            }
        });
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment

        View rootView = inflater.inflate(R.layout.fragment_blank, container, false);
        //avi = (AVLoadingIndicatorView) rootView.findViewById(R.id.barload);
        recyclerView = (RecyclerView) rootView.findViewById(R.id.rv_recycler_view);
        recyclerView.setHasFixedSize(true);
 //       loadJSON();
        adapter = new MyAdapter(data);
        recyclerView.setAdapter(adapter);

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

        return rootView;
    }

}

sorry for my bad english.

BharathRao
  • 1,846
  • 1
  • 18
  • 28
Rony R
  • 3
  • 6

3 Answers3

0

First Get you title from adapter and pass this text using intent extra and set this text in your next activity toolbar.

getSupportActionBar().setTitle("your title");
Jd Prajapati
  • 1,953
  • 13
  • 24
0

Like this pass title:

        fragment2 =new PrediksiFragment();
        Bundle arg= new Bundle();
        arg.putString("title","TITLE");
        fragment2.setArguments(arg);

        return fragment2;

Now in fragment's on create():

    Bundle pb=getArguments();
    String title=pb.getString("title");
Divyesh Patel
  • 2,576
  • 2
  • 15
  • 30
0

Alright, there are 3 steps -

1) You need to pass title to the fragment first -- Checkout my answer
In your case You are going to need to do something like -

switch (position) {
     case 0:
        return BlankFragment.newInstance(tabTitles[position]);

2) Get title int your fragment using getArguments() which acts just like getIntent().getExtras() for an Activity.

Your BlackFragment will have -

String title = getArguments().getString("your_key_of_extras");

3) Pass this title when recyclerview item is clicked -
Here is the Approach in which interface can be used -
Create and interface

public interface OnListClickedListener () {
   void onItemClicked(int position);
}


in Adapter class create setter for and interface

public class MyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
   private OnListClickedListener _listener;

   public MyAdapter (Context context, OnListClickedListener listener) {
       ...
       this._listener = onListClickedListener;
   }

   class MyHolder extends RecyclerView.ViewHolder {

        CardView mCardContainer;

        AddedProductHolder(View itemView) {
            super(itemView);
            ....
            mCardContainer.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    if ( _listener == null ) return;
                    _listener.OnListClicked(getAdapterPosition());
                }
            });
        }
   }
}

Now in your Fragment while setting an Adapter -

mAdapter = new MyAdapter(context, mDataSet, new OnListClickedListener() {
            @Override
            public void OnListClicked(int position) {
                // This is your cardView click event, You got the position
                // Pass title using Intent to TargetActivity
                // Since this code will be in your Fragment
            }
        });
Community
  • 1
  • 1
Paresh P.
  • 6,677
  • 1
  • 14
  • 26