Активность к фрагменту не получена - PullRequest
0 голосов
/ 12 марта 2019

ОБНОВЛЕНИЕ: это мой текущий код, однако он ломается после того, как я повторно нажму ту же кнопку .... Причина: java.lang.IllegalStateException: фрагмент уже активен

Imain_activity.xml разделить на макеты кадров.Верхний макет кадра содержит текст для редактирования и 3 кнопки (маленькая, средняя, ​​большая).Нижняя структура кадра содержит текстовое представление для заполнения текста редактируемого текста мелким, средним или крупным шрифтом.

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

Вот мой код с удаленными средними, большими кнопками

Любая помощь, пожалуйста?

MainActivity:

public class MainActivity extends AppCompatActivity {
 TextView textView;
 Button bSmall;
 Small fSmall = new Small();
  Bundle bundle = new Bundle();



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

        if(findViewById(R.id.fragment)!=null){
            if(savedInstanceState!=null){
                return;
            }

        }

        final EditText editText = (EditText) findViewById(R.id.type_here);

        final Button bSmall = (Button)findViewById(R.id.small);
        Button bMedium = (Button)findViewById(R.id.medium);

        bSmall.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                String message_small = editText.getText().toString();
                small = message_small;

                bundle.putString("message_small", message_small);
                fSmall.setArguments(bundle);
                FragmentManager fm =getFragmentManager();

                FragmentTransaction ft = fm.beginTransaction();
                ft.replace(R.id.fragment, fSmall).commit();


            }

        });

        bMedium.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String message_medium = editText.getText().toString();
                bundle.putString("message_medium", message_medium);
                fMedium.setArguments(bundle);
                FragmentManager fm = getFragmentManager();
                FragmentTransaction ft = fm.beginTransaction();
                ft.replace(R.id.fragment, fMedium).commit();
            }
        });



    }

    public String getMyData(){
        return small;
    }
}



Small:

public class Small extends Fragment {

    EditText editText;
    View myView;




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


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        myView = inflater.inflate(R.layout.fragment_small, container, false);

        Bundle bundle = new Bundle();
        bundle = getArguments();
        MainActivity activity = (MainActivity)getActivity();
        //String dataFromMainActivity = activity.getMyData();


        String myString = bundle.getString("message_small");
        TextView set = myView.findViewById(R.id.small_text);
        set.setText(myString);

        // Inflate the layout for this fragment

        return myView;
    }

}

Ответы [ 2 ]

1 голос
/ 12 марта 2019

Вы забыли добавить пакет к фрагменту. Вам нужно сделать что-то вроде этого:

 Small fSmall = new Small();
 ...
 bundle.putString("message_small", message_small);
 fSmall.setArguments(bundle);

 FragmentManager fm =getFragmentManager();

 FragmentTransaction ft = fm.beginTransaction();
 ft.replace(R.id.fragment, fSmall);
0 голосов
/ 12 марта 2019

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

Вы должны попробовать что-то вроде этого:

Small fSmall = new Small();
Bundle bundle = new Bundle();
bundle.putString("message_small", message_small);   //parameters are (key, value).
fSmall.setArguments(bundle);

getSupportFragmentManager().beginTransaction().replace(R.id.fragment, fSmall).commit();

Во втором фрагменте вы должны проверить, не является ли myString нулевым или пустым.

String myString = getArguments().getString("message_small");
if (myString == null) {
    Log.e("TAG", "Error: null argument");
}

РЕДАКТИРОВАТЬ Я вижу еще одну проблему здесь.Вы получаете доступ к varaible, которые не были созданы.Вы должны надуть ваш макет перед вызовом findViewById(), иначе он вернет NullPointerException.

Обновите свой Small класс следующим образом:

public class Small extends Fragment {
 private EditText editText;
 View myView;

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

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

  // Inflate the layout for this fragment
  myView = inflater.inflate(R.layout.fragment_small, container, false);

  String myString = getArguments().getString("message_small");

  // Here, myView is != null 
  TextView editText = myView.findViewById(R.id.small_text);

  // Here, editText is != null
  editText.setText(myString);

  return myView;
 }
}

Best

...