正在將對象發送到碎片

我正在嘗試將MainActivity的值發送到HomeFragment。我創建了一個帶有底部導航的新項目,我在主活動中刪除了來自firebase的數據,我需要在刪除了來自firebase的數據后將該數據發送到HomeFragment。我用這個包,但我做不到。我怎樣才能解決這個問題?

Thanks

這是我的主要活動

public class MainActivity extends AppCompatActivity {

String age= "12";
String ?ifre;

ArrayList<String> list=new ArrayList<>();
FirebaseFirestore firebaseFirestore;
FragmentManager fragmentManager;





@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


    FirebaseApp.initializeApp(MainActivity.this);
    firebaseFirestore=FirebaseFirestore.getInstance();

    getDatafromFireBase();




    BottomNavigationView navView = findViewById(R.id.nav_view);
    // Passing each menu ID as a set of Ids because each
    // menu should be considered as top level destinations.
    AppBarConfiguration appBarConfiguration = new AppBarConfiguration.Builder(
            R.id.navigation_home, R.id.navigation_dashboard, R.id.navigation_notifications)
            .build();
    NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment);
    NavigationUI.setupActionBarWithNavController(this, navController, appBarConfiguration);
    NavigationUI.setupWithNavController(navView, navController);








}


public String getMyData(){
    return ?ifre;
}


public void getDatafromFireBase(){

    DocumentReference documentReference=(DocumentReference) firebaseFirestore.collection("?ifre").document("?ifre");
    documentReference.addSnapshotListener(new EventListener<DocumentSnapshot>() {
        @Override
        public void onEvent(@Nullable DocumentSnapshot value, @Nullable FirebaseFirestoreException error) {
            if (error!=null){

            }
            if (value!=null){

                Map<String,Object> map=value.getData();
                Number ?ifre1=(Number) value.get("?ifre");
                ?ifre=String.valueOf(?ifre1);

                HomeFragment homeFragment=new HomeFragment();


                System.out.println(?ifre+"98");

                Bundle bundle=new Bundle();
                bundle.putString("?ifre",?ifre);
                homeFragment.setArguments(bundle);








            }
        }
    });



}


}

這是我的家庭片段

public class HomeFragment extends Fragment {

private HomeViewModel homeViewModel;
String name;
ArrayList<String> list2;
String ?ifre;


@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    list2=new ArrayList<>();
    FirebaseApp.initializeApp(getContext());



}

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

    View root = inflater.inflate(R.layout.fragment_home, container, false);
    final TextView textView = root.findViewById(R.id.text_home);

    textView.setText(name);

    String deneme = getArguments().getString("?ifre");

    textView.setText(deneme);
    System.out.println(deneme);


    return root;
}

@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);


}
}
? 最佳回答:

如果已經創建了片段,onCreateView()方法在附加片段時只被調用一次,那么在從活動接收數據時,getArgumens()不會被調用。

所以在本例中,我建議您使用ViewModel來與片段通信。

首先,您需要在buid.gradel中添加這個Dependencie:

implementation "androidx.lifecycle:lifecycle-viewmodel:2.3.1"

然后創建一個擴展ViewModel的類:

import androidx.lifecycle.LiveData;
import androidx.lifecycle.MutableLiveData;
import androidx.lifecycle.ViewModel;

public class LiveDeneme extends ViewModel {

    private final MutableLiveData<String> mutableLiveData = new MutableLiveData<>();


    public void addDeneme(String deneme) {
        mutableLiveData.setValue(deneme);
    }

    public LiveData<String> getDeneme() {
        return mutableLiveData;
    }
}

在活動中初始化onCreate()方法中的ViewModel:

private LiveDeneme provider;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        provider = new ViewModelProvider(this).get(LiveDeneme.class);

        /*
        Rest of your Code
         */
    }

當您發送數據時,請按以下方式使用:

public void getDatafromFireBase(){

    DocumentReference documentReference=(DocumentReference) firebaseFirestore.collection("?ifre").document("?ifre");
    documentReference.addSnapshotListener(new EventListener<DocumentSnapshot>() {
        @Override
        public void onEvent(@Nullable DocumentSnapshot value, @Nullable FirebaseFirestoreException error) {
            if (error!=null){

            }
            if (value!=null){

                Map<String,Object> map=value.getData();
                Number ?ifre1=(Number) value.get("?ifre");
                ?ifre=String.valueOf(?ifre1);
                // send the data with this line 
                provider.addDeneme(sifre);

            }
        }
    });

}

最后,要從片段中接收數據,請使用如下觀察者:

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

    View root = inflater.inflate(R.layout.fragment_home, container, false);
    final TextView textView = root.findViewById(R.id.text_home);

    textView.setText(name);
    
    LiveDeneme liveDeneme = new ViewModelProvider(requireActivity()).get(LiveDeneme.class);

    liveDeneme.getDeneme().observe(getViewLifecycleOwner(), new Observer<String>() {
        @Override
        public void onChanged(String deneme) {
            textView.setText(deneme);
        }
    });
    

    return root;
}

Update

要發送ArrayList<String>,ViewModel類應如下所示:

import androidx.lifecycle.LiveData;
import androidx.lifecycle.MutableLiveData;
import androidx.lifecycle.ViewModel;

import java.util.ArrayList;

public class LiveDeneme extends ViewModel {

    private final MutableLiveData<ArrayList<String>> mutableLiveData = new MutableLiveData<>();


    public void addDeneme(ArrayList<String> deneme) {
        mutableLiveData.setValue(deneme);
    }

    public LiveData<ArrayList<String>> getDeneme() {
        return mutableLiveData;
    }
}

然后要從活動中發送此列表,只需執行以下操作:

provider.addDeneme(yourList)

最后在你的片段中收到這個列表:

LiveDeneme liveDeneme = new ViewModelProvider(requireActivity()).get(LiveDeneme.class);
    
liveDeneme.getDeneme().observe(getViewLifecycleOwner(), new Observer<ArrayList<String>>() {
                @Override
                public void onChanged(ArrayList<String> strings) {
                    for (String s : strings) {
                        System.out.println(s); // here I print all the element of the list 
                    }
                }
            });

更多信息請查閱官方文件

主站蜘蛛池模板: 亚洲av片一区二区三区| 日韩一区二区电影| 日产亚洲一区二区三区| 无码人妻一区二区三区精品视频| 无码国产精品一区二区免费式直播 | 中文字幕亚洲一区二区三区| 国产欧美色一区二区三区| 国99精品无码一区二区三区| 一区二区国产在线观看| 精品国产日韩亚洲一区在线| 日本视频一区在线观看免费 | 国产一区二区三区在线视頻| 精品国产一区二区三区香蕉事| 亚洲美女一区二区三区| 亚洲AV综合色区无码一区爱AV| 韩日午夜在线资源一区二区 | 麻豆一区二区免费播放网站| 熟女精品视频一区二区三区| 日本在线一区二区| 亚洲AV福利天堂一区二区三| 国产午夜精品免费一区二区三区| 精品一区二区三区色花堂| 国产精品男男视频一区二区三区 | 精品无码人妻一区二区三区18 | 一区二区网站在线观看| 香蕉久久AⅤ一区二区三区| 日韩经典精品无码一区| 亚洲国产激情一区二区三区| 精品国产亚洲一区二区在线观看 | 无码国产精品一区二区免费3p | 99精品国产高清一区二区麻豆 | 国产成人一区二区三区在线| 国产一区二区高清在线播放| 亚洲色婷婷一区二区三区| 久久精品一区二区国产| 亚洲AV无码一区二区三区在线| 精品国产一区二区三区久久久狼| 亚洲一区二区无码偷拍| 日本韩国黄色一区二区三区| 精品日本一区二区三区在线观看 | 无码人妻一区二区三区在线|