Получение нулевого значения при передаче данных через пакет из Activity в Fragment - PullRequest
0 голосов
/ 11 марта 2019

Потеря данных на пути при прохождении через связку, я получаю

Попытка вызвать виртуальный метод 'java.lang.String android.os.Bundle.getString (java.lang.String)' для нулевого объекта ссылка на String bundlePassData = this.getArguments (). getString ("tagName");

Вот пример моего кода. MainActivity ->

 tagsView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
            Bundle bundle = new Bundle();
            TextView textView = (TextView) view.findViewById(R.id.tagName);
            String selectedItemName = textView.getText().toString();
            bundle.putString("tagName", selectedItemName);

            TaskAssignFragment taskAssignFragment = new TaskAssignFragment();
            taskAssignFragment.setArguments(bundle);

            FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
            transaction.commit();

            getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,
                    new TaskAssignFragment()).addToBackStack(null).commit();

            Log.i("ListView", selectedItemName);
        }
    });

TaskAssignFragment ->

@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_task_assign, container, false);
    TextView test = view.findViewById(R.id.testerView);

    String bundlePassData = this.getArguments().getString("tagName");
    test.setText(bundlePassData);

    return view;
}

Должен ли я попробовать interfaces? Но если бы мне было нужно, мне нужны данные как переменная, а не только функция, потому что я бы использовал их в других местах в моем fragment.

Ответы [ 4 ]

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

В вашем коде Вы создаете новый фрагмент при замене.

TaskAssignFragment taskAssignFragment = new TaskAssignFragment();
            taskAssignFragment.setArguments(bundle);

getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,
                    new TaskAssignFragment()).addToBackStack(null).commit();

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

  getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,
                   taskAssignFragment).addToBackStack(null).commit();
0 голосов
/ 11 марта 2019

Вы создаете новый объект при замене фрагмента.

        TaskAssignFragment taskAssignFragment = new TaskAssignFragment();
        taskAssignFragment.setArguments(bundle);

        getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,
                taskAssignFragment).addToBackStack(null).commit();

Попробуйте это

0 голосов
/ 11 марта 2019
tagsView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
            Bundle bundle = new Bundle();
            TextView textView = (TextView) view.findViewById(R.id.tagName);
            String selectedItemName = textView.getText().toString();
            bundle.putString("tagName", selectedItemName);

            TaskAssignFragment taskAssignFragment = new TaskAssignFragment();
            taskAssignFragment.setArguments(bundle);

            FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
            transaction.commit();

            getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,
                    taskAssignFragment).addToBackStack(null).commit();

            Log.i("ListView", selectedItemName);
        }
    });

Пожалуйста, попробуйте этот код, вы создаете новый экземпляр TaskAssignFragment () и передаете его без аргументов

0 голосов
/ 11 марта 2019

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

TaskAssignFragment taskAssignFragment = new TaskAssignFragment();
// Call here your own method (from fragment)
taskAssignFragment.setSelectedItemName(selectedItemName);

А в вашем фрагменте:

public void setSelectedItemName(String selectedItemName) {
    // Store data as field in class
    this.selectedName = selectedItemName
}

где selectedName - это поле в вашем классе.

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