【问题标题】:pass tab title recyclerview to acticity将标签标题 recyclerview 传递给活动
【发布时间】:2017-03-24 04:40:33
【问题描述】:

我需要帮助才能将标签标题传递给我在点击项目 recyclerview 上的详细活动。然后我想将该标题显示为操作栏标题

这是我的带有 recyclerview 的标签:

在我点击卡片视图上的项目后,他们将显示详细活动 我将在操作栏标题上显示 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 以详细了解活动:

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

}

抱歉我的英语不好。

【问题讨论】:

  • 将选项卡标题作为参数传递到相应的片段中。然后点击使用该参数传递给下一个活动
  • 你有你的解决方案还是我还需要发布答案?
  • @DivyeshPatel 如何获取片段的标题名称? .so 之后,我在 onclick cardview 中通过额外的意图传递标题?
  • @Wizard 还没有..我知道设置标题但我不知道如何将标签上的标题传递给下一个活动..你能帮我吗?

标签: android android-fragments tabs android-actionbar android-recyclerview


【解决方案1】:

好的,有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);
}


Adapter类中为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
            }
        });

【讨论】:

  • 我已经完成了第 1 步和第 2 步并且一切正常,但我在 myadapter onclick cardview 中获取标题字符串有点困惑。
  • 编辑了答案。
  • 所以我必须先将 onclick cardview 传递给片段,然后将标题字符串插入到已经在片段中的 onlistedcliked 中?这会工作..谢谢
【解决方案2】:

首先从适配器获取标题并使用额外意图传递此文本,然后在下一个活动工具栏中设置此文本。

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

【讨论】:

  • 是的,我知道设置它..但我不知道如何将标签标题传递给我的适配器
【解决方案3】:

喜欢这个通行证标题:

        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");

【讨论】:

    猜你喜欢
    • 2012-11-04
    • 1970-01-01
    • 1970-01-01
    • 2018-10-12
    • 2016-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多