getArguements () во Fragment не читает строки, отправленные из Activity - PullRequest
0 голосов
/ 01 мая 2020

Я создаю приложение чата. Таким образом, пытаясь отправить зарегистрированное имя пользователя и один из пользователей из списка пользователей во фрагмент, который получает эти строки и соответственно сохраняет данные как user_chatbuddy child в firebase. Данные, помещенные в пакет, действительно показывают те же значения в Toast, когда в Toast используется «bundle.toString ()». Однако getArguements () в sendMsgFragment получает только нулевые значения.

Вот соответствующие коды -

UsersList. java code -

usersList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) {
            // TODO Auto-generated method stub




           Intent goChatActivity = new Intent(UserList.this, ChatActivity.class);
           startActivity(goChatActivity);

            String currentUser = "Abdul"; **//I am getting dynamic data here**
            String chatBuddy = "Razzak";  **//These are just dummy names for understanding**


            Bundle bundle = new Bundle();
            bundle.putString("currentUser", currentUser);
            bundle.putString("chatBuddy", chatBuddy);

            SendMsgFragment sendMsgFragment = new SendMsgFragment();
            sendMsgFragment.setArguments(bundle);
            Toast.makeText(getApplicationContext(), bundle.toString(), Toast.LENGTH_SHORT).show(); **// This toast shows bundle strings like bundle currentUser=Abdul, chatBuddy=Razzak**

ChatActivity. java код, в котором я заменяю фрейм на SendMsgFragment, выглядит следующим образом -

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_chat);
        loadFragment(new SendMsgFragment()); **//loading fragment here**
}

private void loadFragment(Fragment fragment){
        FragmentManager fragmentManager = getSupportFragmentManager();
        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
        fragmentTransaction.replace(R.id.frameLayout, fragment);
        fragmentTransaction.commit();

    }

SendMsgFragment. java код выглядит следующим образом. Я использую Onclick для изображения, которое при нажатии сохранит данные в базе данных. Но при тестировании он только помещает null_null в базу данных для авторизованного пользователя и chatBuddy. То же самое относится и к тосту в конце этого кода -

    sendImgView.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            try {
                currentUser = getArguments().getString("currentUser"); **// This returning null**
                chatBuddy = getArguments().getString("chatBuddy"); **// This also returning null**
            }catch (Exception ex){
                ex.printStackTrace();
            }
            Chat chat = new Chat(chatEditText.getText().toString(), cal.getTime().toString());

            Toast.makeText(getActivity(), currentUser + "_" + chatBuddy, Toast.LENGTH_LONG).show();
            chatEditText.setText("");
        }
    });

1 Ответ

1 голос
/ 01 мая 2020

В вашем первом фрагменте кода SendMsgFragment, который вы создаете, отличается от того, который вы создаете во втором фрагменте:

SendMsgFragment sendMsgFragment = new SendMsgFragment();
sendMsgFragment.setArguments(bundle);
Toast.makeText(getApplicationContext(), bundle.toString(), Toast.LENGTH_SHORT).show();
loadFragment(new SendMsgFragment());

...

FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.frameLayout, fragment);
fragmentTransaction.commit();

Создание первого фрагмента и установка его аргументов на самом деле ничего не делает, потому что это второй фрагмент, который вы показываете пользователю.

Вы можете передать значения операции в первом блоке кода:

Intent goChatActivity = new Intent(UserList.this, ChatActivity.class);
goChatActivity.putExtra("currentUser", currentUser);
goChatActivity.putExtra("chatBuddy", chatBuddy);
startActivity(goChatActivity);

А затем вы можете извлечь их и передать их фрагменту во втором блоке:

String currentUser = getIntent().getStringExtra("currentUser");
String chatBuddy = getIntent().getStringExtra("chatBuddy");

Bundle bundle = new Bundle();
bundle.putString("currentUser", currentUser);
bundle.putString("chatBuddy", chatBuddy);

Fragment f = new SendMsgFragment();
f.setArguments(bundle);

loadFragment(f); **//loading fragment here**
...