Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何将值从一个片段的回收器视图项传递到另一个片段_Android_Android Fragments_Android Recyclerview_Pass By Value - Fatal编程技术网

Android 如何将值从一个片段的回收器视图项传递到另一个片段

Android 如何将值从一个片段的回收器视图项传递到另一个片段,android,android-fragments,android-recyclerview,pass-by-value,Android,Android Fragments,Android Recyclerview,Pass By Value,我很难理解如何将值从一个片段传递到另一个片段。我在RecyclerItem中创建了一个切换按钮,当选中该按钮时,应该将卡片的内容传递给实现recyclerVIew的另一个片段(收藏夹) 这是我的recyclerView适配器 public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.ViewHolder> { private ClipboardManager myClipboard;

我很难理解如何将值从一个片段传递到另一个片段。我在RecyclerItem中创建了一个切换按钮,当选中该按钮时,应该将卡片的内容传递给实现recyclerVIew的另一个片段(收藏夹)

这是我的recyclerView适配器

public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.ViewHolder> {
    private ClipboardManager myClipboard;
    private ClipData myClip;
    private Context context;




    public List<CardItemModel> cardItems;

    public RecyclerAdapter(List<CardItemModel> cardItems){
        this.cardItems = cardItems;
    }

    public static class ViewHolder extends RecyclerView.ViewHolder{
        ImageView copyButton;
        ImageView shareButton;
        ToggleButton favButton;


        TextView title;
        TextView content;
        public ViewHolder(View itemView) {
            super(itemView);
            this.title = (TextView)itemView.findViewById(R.id.card_title);
            this.content = (TextView)itemView.findViewById(R.id.card_content);
            this.copyButton= (ImageView) itemView.findViewById(R.id.copyButton);
            this.shareButton=(ImageView) itemView.findViewById(R.id.shareButton);

            this.favButton=(ToggleButton) itemView.findViewById(R.id.favButton);

            favButton.setChecked(false);
            favButton.setBackgroundDrawable(ContextCompat.getDrawable(favButton.getContext(), R.mipmap.ic_launcher));


        }
    }



    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.recycler_item,parent,false);
        ViewHolder viewHolder = new ViewHolder(view);
        return viewHolder;
    }

    @Override
    public void onBindViewHolder(final ViewHolder holder, int position) {
        holder.title.setText(cardItems.get(position).title);
        holder.content.setText(cardItems.get(position).content);
        holder.copyButton.setOnClickListener(new View.OnClickListener(){
            public void onClick(View v){


                myClipboard = (ClipboardManager) v.getContext().getSystemService(Context.CLIPBOARD_SERVICE);


                myClip = ClipData.newPlainText("label", holder.content.getText().toString());
                myClipboard.setPrimaryClip(myClip);
                Toast.makeText(v.getContext(), "Copied to clipboard" , Toast.LENGTH_SHORT ).show();

            }
        });
        holder.shareButton.setOnClickListener(new View.OnClickListener(){
            public void onClick(View v){
                Intent share = new Intent(Intent.ACTION_SEND);
                share.setType("text/plain");
                share.putExtra(Intent.EXTRA_TEXT, holder.content.getText().toString());
                v.getContext().startActivity(Intent.createChooser(share, "Share Text"));
            }
        });

        holder.favButton.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener(){
            @Override
            public void onCheckedChanged(CompoundButton favButton, boolean isChecked){
                if (isChecked)
                    favButton.setBackgroundDrawable(ContextCompat.getDrawable(favButton.getContext(),R.mipmap.ic_launcher));

                else
                    favButton.setBackgroundDrawable(ContextCompat.getDrawable(favButton.getContext(), R.mipmap.ic_cart));
            }
        });
    }

    @Override
    public int getItemCount() {
        return cardItems.size();
    }
}
公共类RecyclerAdapter扩展了RecyclerView.Adapter{ 私人剪贴板管理器myClipboard; 私有clipdatamyclip; 私人语境; 公开列表目录; 公共回收适配器(列表项){ this.cardItems=cardItems; } 公共静态类ViewHolder扩展了RecyclerView.ViewHolder{ ImageView复制按钮; 图像视图共享按钮; 切换按钮FAV按钮; 文本视图标题; 文本视图内容; 公共视图持有者(视图项视图){ 超级(项目视图); this.title=(TextView)itemView.findViewById(R.id.card\u title); this.content=(TextView)itemView.findViewById(R.id.card\u content); this.copyButton=(ImageView)itemView.findViewById(R.id.copyButton); this.shareButton=(ImageView)itemView.findViewById(R.id.shareButton); this.favButton=(ToggleButton)itemView.findViewById(R.id.favButton); favButton.setChecked(false); setBackgroundDrawable(ContextCompat.getDrawable(favButton.getContext(),R.mipmap.ic_启动器)); } } @凌驾 public ViewHolder onCreateViewHolder(视图组父级,int-viewType){ 视图=LayoutFlater.from(parent.getContext()).flate(R.layout.recycler\u项,parent,false); ViewHolder ViewHolder=新的ViewHolder(视图); 返回视图持有者; } @凌驾 公共无效onBindViewHolder(最终ViewHolder,内部位置){ holder.title.setText(cardItems.get(position.title)); holder.content.setText(cardItems.get(position.content)); holder.copyButton.setOnClickListener(新视图.OnClickListener(){ 公共void onClick(视图v){ myClipboard=(ClipboardManager)v.getContext().getSystemService(Context.ClipboardManager\u服务); myClip=ClipData.newPlainText(“标签”,holder.content.getText().toString()); myClipboard.setPrimaryClip(myClip); Toast.makeText(v.getContext(),“复制到剪贴板”,Toast.LENGTH_SHORT).show(); } }); holder.shareButton.setOnClickListener(新视图.OnClickListener(){ 公共void onClick(视图v){ 意向共享=新意向(意向.行动\发送); share.setType(“文本/普通”); share.putExtra(Intent.EXTRA_TEXT,holder.content.getText().toString()); v、 getContext().startActivity(Intent.createChooser(共享,“共享文本”); } }); holder.favButton.setOnCheckedChangeListener(新的CompoundButton.OnCheckedChangeListener(){ @凌驾 检查更改后的公共无效(复合按钮FAVBUTON,布尔值已检查){ 如果(已检查) setBackgroundDrawable(ContextCompat.getDrawable(favButton.getContext(),R.mipmap.ic_启动器)); 其他的 setBackgroundDrawable(ContextCompat.getDrawable(favButton.getContext(),R.mipmap.ic_-cart)); } }); } @凌驾 public int getItemCount(){ 返回cardItems.size(); } } 这是我最喜欢的片段,我想在这里传递值

public class FavouriteFragment extends Fragment {

    private List<CardItemModel> cardItems = new ArrayList<>(20);
    private MainActivity mainActivity;
    private Toolbar toolbar;
    private RecyclerView recyclerView;
    private RecyclerAdapter recyclerAdapter;

    public FavouriteFragment() {

    }

    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
        mainActivity = (MainActivity)activity;
    }

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

        View view = inflater.inflate(R.layout.fragment_favourite, container, false);

        toolbar = (Toolbar)view.findViewById(R.id.fab_toolbar);

        setupToolbar();



        recyclerView = (RecyclerView)view.findViewById(R.id.fab_recycler_view);

        setupRecyclerView();

        return view;
    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        mainActivity.setupNavigationDrawer(toolbar);
    }

    private void setupToolbar(){
        toolbar.setTitle(getString(R.string.fav_fragment_title));
        mainActivity.setSupportActionBar(toolbar);
    }

    private void setupRecyclerView(){
        recyclerView.setLayoutManager(new LinearLayoutManager(mainActivity));
        recyclerView.setHasFixedSize(true);
        initializeCardItemList();
        recyclerAdapter = new RecyclerAdapter(cardItems);
        recyclerView.setAdapter(recyclerAdapter);
    }

    private void initializeCardItemList(){
        CardItemModel cardItemModel;
        String[] cardTitles = getResources().getStringArray(R.array.fav_cards);
        String[] cardContents = getResources().getStringArray(R.array.fav_cards_content);
        final int length = cardTitles.length;
        for(int i=0;i<length;i++){
            cardItemModel = new CardItemModel(cardTitles[i],cardContents[i]);
            cardItems.add(cardItemModel);
        }
    }



}
公共类FavoriteFragment扩展了片段{
private List cardItems=新的ArrayList(20);
私人活动;
专用工具栏;
私人回收站;
私人回收器适配器回收器适配器;
公共偏好片段(){
}
@凌驾
公共事务主任(活动){
超级转速计(活动);
mainActivity=(mainActivity)活动;
}
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
视图=充气机。充气(R.layout.fragment\u favorite,container,false);
toolbar=(toolbar)view.findviewbyd(R.id.fab_toolbar);
设置工具栏();
recyclerView=(recyclerView)视图.findViewById(R.id.fab\u recycler\u视图);
setupRecyclerView();
返回视图;
}
@凌驾
已创建ActivityState上的公共无效(Bundle savedInstanceState){
super.onActivityCreated(savedInstanceState);
mainActivity.setupNavigationDrawer(工具栏);
}
专用void setupToolbar(){
setTitle(getString(R.string.fav_fragment_title));
mainActivity.setSupportActionBar(工具栏);
}
私有void setupRecyclerView(){
recyclerView.setLayoutManager(新的LinearLayoutManager(主活动));
recyclerView.setHasFixedSize(true);
初始化CardiItemList();
recyclerAdapter=新的recyclerAdapter(cardItems);
recyclerView.setAdapter(recyclerAdapter);
}
private void initializeCarditItemList(){
CardItemModel CardItemModel;
String[]cardTitles=getResources().getStringArray(R.array.fav_卡);
String[]cardContents=getResources().getStringArray(R.array.fav\u cards\u content);
最终整数长度=cardTitles.length;

对于(inti=0;i片段之间的通信可以通过EventBus完成。 步骤: 1.创建事件类 2.注册要更改片段数据的事件。 3.从片段发布事件(点击切换按钮)

步骤1:

import java.io.Serializable;

public class ToggleButtonClickEvent implements Serializable {
private CardItemModel cardItemModel;

public ToggleButtonClickEvent (CardItemModel ardItemModel){
    this.cardItemModel= cardItemModel;
}

public CardItemModel getCardItemModel() {
    return cardItemModel;
}
}

步骤2: 在要更改数据的片段中注册和注销事件

 @Override
 public void onStart() {
 super.onStart();
 EventBus.getDefault().register(this);
}

步骤3:

单击切换按钮时发布事件

    EventBus.getDefault().post(new ToggleButtonClickEvent(cardItemModel));

在Bundle中添加您的值

    Fragment fragment = new Table_Selection_QRCODE();
                            Bundle bun = new Bundle();
                            bun.putString("table","20");
                            fragment.setArguments(bun);
getFragmentManager().beginTransaction().replace(R.id.frag, fragment).commit();
在另一个片段中,接收如下值
    Fragment fragment = new Table_Selection_QRCODE();
                            Bundle bun = new Bundle();
                            bun.putString("table","20");
                            fragment.setArguments(bun);
getFragmentManager().beginTransaction().replace(R.id.frag, fragment).commit();
@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Bundle b=getArguments();
        if(b!=null){
            rslt=b.getString("table","");
        }
    }
    class FragmentA extends Fragment{
     //Your fragment a functionalities goes here
    //now define an interface inside this FragmentA

   //you get reference from main activity
    MainActivity activity;
    @Override
    void onCreate(){
    activity = getActivity();
    }
//after your functionalities you can call passValue function of main activity from the variable 'activity' like
    activity.passValue(your integer value from fragmentA to main activity)

    interface OnValuePassedListener{
      void passValue(int value)//if you want to pass integer value 
      }
    }


    //this is the activity where FragmentA is located

    public class MainActivity extends Activity implements FragmentA.OnValuePassedListener{
//Inside this activity, you write code to open the fragment. When you do that pass this activity's reference to the FragmentA


    @Override
    void passValue(int value){
    //you get the value from FragmentA inside this function
        }

    }