Как вызвать фрагмент и отправить данные вместе? - PullRequest
0 голосов
/ 22 сентября 2018

Как вызвать фрагмент и отправить данные вместе в структуре фрагмента Android?

В основном я хочу набрать текст из фрагмента1 и отправить текст во фрагмент2, но вместе по нажатию кнопки во фрагменте1 я хочу вызвать фрагмент2 и отобразитьтекст, который я набрал в editext во фрагменте1 одновременно.ниже приведены коды: - fragement1 ---

public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View rootview = inflater.inflate(R.layout.fragment1,container,false);
    final EditText edittext= rootview.findViewById(R.id.editText);
    Button button= rootview.findViewById(R.id.button);
    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            anInterface.interface1(edittext.getText().toString());
            Toast.makeText(getActivity(), "just test",
                    Toast.LENGTH_LONG).show();
        }
    });
    return rootview;
}

MainActivity: ---

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

    frag1= new Fragment1();
    fragmentManager= getSupportFragmentManager();
    fragmentTransaction= fragmentManager.beginTransaction();
    fragmentTransaction.add(R.id.fragment_1,frag1);
    fragmentTransaction.commit();
}
@Override
public void interface1(String string) {
    frag2 = new Fragment2();
    fragmentTransaction= fragmentManager.beginTransaction();
    fragmentTransaction.replace(R.id.fragment_2,frag2);        
    fragmentTransaction.commit();
    frag2.textv(string);
   }

фрагмент2: ---

 @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    rootview = inflater.inflate(R.layout.fragment2,container,false);
    textView= rootview.findViewById(R.id.textView2);
    return rootview;
}
public void textv(String string){
   textView.setText(string);
}

Ошибка при получении

java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference

Пока я искал компоновку, которая будет прикреплена, прежде чем вызывать метод textview, и я делал это в основном коде активности, но без успеха

fragmentTransaction.replace(R.id.fragment_2,frag2);
    fragmentTransaction.commit();
    frag2.textv(string);

1 Ответ

0 голосов
/ 22 сентября 2018
@Override
public void interface1(String string) {
    frag2 = new Fragment2();
    fragmentTransaction= fragmentManager.beginTransaction();
    fragmentTransaction.replace(R.id.fragment_2,frag2);        
    fragmentTransaction.commit();
    frag2.textv(string);
   }

вы пытаетесь получить доступ к представлениям frag2, хотя они еще не созданы!так что NPE будет брошен, вы должны отправить строку значения в пакет для фрагмента2 и в onCreate фрагмента2 .. вы читаете значение и обновляете пользовательский интерфейс .. или если вы убедитесь, что фрагмент2 уже добавлен и присоединенк деятельности, а затем получить доступ к его представлениям.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...