Суть в чём, я имею две версии кода, которые по моему мнению должны делать одно и тоже. Но в одной из версий получается NullPointerException.
Что я пытаюсь сделать?
Мне надо получить введённые в EditText данные, EditText находится во фрагменте.
Приведённый ниже код работает.
Рабочий код
import android.os.Bundle;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import java.util.Timer;
import java.util.TimerTask;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private FragmentManager fm;
private FragmentTransaction ft;
private MyFragment mf;
private TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = findViewById(R.id.textView_text_of_fragment);
fm = getSupportFragmentManager();
mf = new MyFragment();
}
@Override
public void onClick(View v) {
ft = fm.beginTransaction();
switch (v.getId()) {
case R.id.add_button:
if (fm.findFragmentByTag(MyFragment.FRAGMENT_TAG) == null) {
Toast.makeText(this, "Is add button!", Toast.LENGTH_SHORT).show();
ft.add(R.id.fragment_layout, mf, MyFragment.FRAGMENT_TAG);
Toast.makeText(this, "Fragment is added!", Toast.LENGTH_SHORT).show();
}
break;
case R.id.set_text_button:
if(fm.findFragmentByTag(MyFragment.FRAGMENT_TAG)!= null){
EditText text = findViewById(R.id.editText);
textView.setText(textView.getText() + text.getText().toString());
Toast.makeText(this, "Text is added!", Toast.LENGTH_SHORT).show();
}
break;
/* case R.id.remove_button:
if (fm.findFragmentByTag(MyFragment.FRAGMENT_TAG) != null) {
EditText text = findViewById(R.id.editText);
text.setText("");
Toast.makeText(this, "Fragment is removed!", Toast.LENGTH_SHORT).show();
ft.remove(mf);
}
break;*/
}
ft.commit();
}
}
Далее вторая версия кода, которая выдаёт NullPointerException, на метод setText().
Я пытался проверить наличие фрагмента в менеджере, и получил flase.
Не рабочий код
package com.example.mkiel.myapplication;
import android.os.Bundle;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private FragmentManager fm;
private FragmentTransaction ft;
private MyFragment mf;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
fm = getSupportFragmentManager();
mf = new MyFragment();
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.add_button:
ft = fm.beginTransaction();
if (fm.findFragmentByTag(MyFragment.FRAGMENT_TAG) == null) {
ft.add(R.id.fragment_layout, mf, MyFragment.FRAGMENT_TAG);
ft.commit();
ft = fm.beginTransaction();
EditText text = findViewById(R.id.editText);
text.setText("При вставке получается null исключение");
ft.commit();
}
break;
/* case R.id.set_text_button:
if (fm.findFragmentByTag(MyFragment.FRAGMENT_TAG) != null) {
EditText text = findViewById(R.id.editText);
textView.setText(textView.getText() + text.getText().toString());
}
break;*/
/* case R.id.remove_button:
if (fm.findFragmentByTag(MyFragment.FRAGMENT_TAG) != null) {
EditText text = findViewById(R.id.editText);
text.setText("");
Toast.makeText(this, "Fragment is removed!", Toast.LENGTH_SHORT).show();
ft.remove(mf);
}
break;*/
}
}
}
Код Фрагмента
public class MyFragment extends Fragment {
public final static String FRAGMENT_TAG = "FragmentOne";
public View view;
@Override
public View getView() {
return super.getView();
}
@Override
public View onCreateView( LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
view = inflater.inflate(R.layout.fragment_layout, container, false);
return view;
}
}
Помогите понять что я делаю не так и почему получается NullPointerException во второй версии кода.
Спасибо!