如何从不同的片段B中改变片段A中RecyclerView项目的按钮文字。

问题描述 投票:0回答:1

我有两个碎片。片段A 片段B,在一次活动中。在片段A中,我已经实现了 再生器查看在ViewHolder的帮助下,它显示了一个项目列表,每个项目都是一个TextView的文本.我想要的是通过点击RecyclerView中的按钮来改变TextView的背景颜色。片段B

我已经附上了图片。

两块碎片的图片

以下是代码 主要活动

package com.tutorials180.changerecycleritem;

import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentTransaction;

import android.os.Bundle;

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {

    FragOne objectFragOne=new FragOne();
    FragTwo objectFragTwo=new FragTwo();
    public MyAdapter.MyInterfaceJIP objectMyInterfaceJIP;
    ArrayList<String> arrayList;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        arrayList=new ArrayList<>();
        arrayList.add("Hi");
        arrayList.add("Bi");
        arrayList.add("new");
        changeFragment(objectFragOne,arrayList);

    }

    public void changeFragment(Fragment object, MyAdapter.MyInterfaceJIP objectMyInterfaceJIP)
    {
        Bundle bearTokenBundle=new Bundle();
        bearTokenBundle.putParcelable("interface",objectMyInterfaceJIP);
        bearTokenBundle.putStringArrayList("my",arrayList);

        object.setArguments(bearTokenBundle);
        FragmentTransaction objectFragmentTransaction=getSupportFragmentManager().beginTransaction();

        objectFragmentTransaction.replace(R.id.container,object).commit();
    }

    public void changeFragment(Fragment object,ArrayList<String> data)
    {
        Bundle bearTokenBundle=new Bundle();
        bearTokenBundle.putStringArrayList("my",data);

        object.setArguments(bearTokenBundle);
        FragmentTransaction objectFragmentTransaction=getSupportFragmentManager().beginTransaction();
        objectFragmentTransaction.replace(R.id.container,object).commit();
    }
}

适配器代码

 package com.tutorials180.changerecycleritem;

import android.content.Context;
import android.os.Parcel;
import android.os.Parcelable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

import java.util.ArrayList;

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder>{

    FragOne objectFragOne;
    FragTwo objectFragTwo;

    Context context;

    ArrayList<String> objArrayList;

    public MyAdapter(FragOne objectFragOne, FragTwo objectFragTwo, Context context, ArrayList<String> objArrayList) {
        this.objectFragOne = objectFragOne;
        this.objectFragTwo = objectFragTwo;
        this.context = context;
        this.objArrayList = objArrayList;
    }

    public interface MyInterfaceJIP extends Parcelable {
        public void deleteItem();
    }

    @NonNull
    @Override
    public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        return new MyViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.single_item,parent,false));
    }

    boolean moved=false;
    @Override
    public void onBindViewHolder(@NonNull final MyViewHolder holder, final int position) {

        if(!moved){
            holder.objectTextView.setText("MOVE");}
        else if(moved)
        {
            holder.objectTextView.setText("Moved Baby");}
        holder.objectTextView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                final MainActivity obj= (MainActivity)context;
                moved=true;
                obj.changeFragment(objectFragTwo, new MyInterfaceJIP() {
                    @Override
                    public int describeContents() {
                        return 0;
                    }

                    @Override
                    public void writeToParcel(Parcel parcel, int i) {

                    }

                    @Override
                    public void deleteItem() {
                        moved=true;
                        obj.changeFragment(objectFragOne,objArrayList);
                        //notifyItemChanged(position);
                    }
                });
            }
        });
    }

    @Override
    public int getItemCount() {
        return objArrayList.size();
    }

    class MyViewHolder extends RecyclerView.ViewHolder
    {
        TextView objectTextView;
        public MyViewHolder(@NonNull View itemView) {
            super(itemView);
            objectTextView=itemView.findViewById(R.id.sr_text);
        }
    }
}

片段A的代码

    package com.tutorials180.changerecycleritem;

import android.os.Bundle;

import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Toast;

import java.util.ArrayList;


/**
 * A simple {@link Fragment} subclass.
 */
public class FragOne extends Fragment {

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

    View view;
    RecyclerView objectRecyclerView;

    ArrayList<String> object;
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {

        view=inflater.inflate(R.layout.fragment_frag_one, container, false);
        objectRecyclerView=view.findViewById(R.id.RV);

        object=new ArrayList<>();
        if(getArguments()!=null)
        {
            Toast.makeText(getContext(), "INside", Toast.LENGTH_SHORT).show();
            object=getArguments().getStringArrayList("my");
            MyAdapter objectMyAdapter=new MyAdapter(new FragOne(),new FragTwo(),getContext(),object);
            objectRecyclerView.setLayoutManager(new LinearLayoutManager(getContext()));

            objectRecyclerView.setAdapter(objectMyAdapter);
            objectRecyclerView.setHasFixedSize(true);

            objectMyAdapter.notifyDataSetChanged();
        }


        return view;
    }
}

片段二

    package com.tutorials180.changerecycleritem;

import android.os.Bundle;

import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.RecyclerView;

import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;


/**
 * A simple {@link Fragment} subclass.
 */
public class FragTwo extends Fragment {

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

    public MyAdapter.MyInterfaceJIP objectMyInterfaceJIP;
    View view,view2;

    Button button;
    TextView rvBtn;
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        view=inflater.inflate(R.layout.fragment_frag_two, container, false);
        view2=inflater.inflate(R.layout.single_item, container, false);
        button=view.findViewById(R.id.btn);
        rvBtn=view2.findViewById(R.id.sr_text);
        if(getArguments()!=null)
        {   objectMyInterfaceJIP=getArguments().getParcelable("interface");

            button.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    rvBtn.setBackgroundColor(getContext().getResources().getColor(R.color.colorPrimary));
                    objectMyInterfaceJIP.deleteItem();
                }
            });
        }
        return view;
    }
}
android android-fragments android-recyclerview recycler-adapter
1个回答
0
投票

找到解决方案在父活动中声明一个变量,然后根据该变量的值在Recycler View中绘制文本视图。这可能不是最终的解决方案,但它是一种技巧,以解决这个问题,但如果有人发现一个更好的解决方案,他是非常欢迎分享。

© www.soinside.com 2019 - 2024. All rights reserved.