将选项卡标题 recyclerview 传递给活动

pass tab title recyclerview to acticity

我需要帮助将选项卡标题传递给我的详细信息 activity 点击项目 recyclerview。然后我想将该标题显示为操作栏标题

这是我的 recyclerview 选项卡:

在我点击 cardview 上的项目后,它们将显示详细信息 activity 我将在操作栏标题上显示 tabtile :

所以标题基于包含 recylerview 的选项卡(类别)。 有关信息,我使用寻呼机适配器来显示标题,并在我的回收站视图中使用适配器。所以我应该将标题传递给适配器吗?

mainactivity(显示选项卡和卡片视图)代码:

    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;
    }

}

我的适配器与 onclick cardview 详细 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");
        }
    });
}

我加载回收器视图的示例框架:

        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;
    }

}

抱歉我的英语不好。

首先从适配器获取标题并使用 intent extra 传递此文本,然后在下一个 activity 工具栏中设置此文本。

getSupportActionBar().setTitle("your title");

喜欢这个通行证标题:

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

        return fragment2;

现在在 create() 的片段中:

    Bundle pb=getArguments();
    String title=pb.getString("title");

好的,有 3 个步骤 -

1) 您需要先将标题传递给 fragment -- 查看我的 answer
在你的情况下你需要做一些事情 -

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

2) 使用 getArguments() 为您的片段获取标题,这与 getIntent().getExtras() 对于 Activity.

的作用一样

您的 BlackFragment 将有 -

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

3) 单击 recyclerview 项时传递此标题 -
这是可以使用 interface 的方法 -
创建和接口

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


in Adapter class 为 interface

创建 setter
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());
                }
            });
        }
   }
}

现在在您的 Fragment 中设置 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
            }
        });