getString () вызывает сбой приложения. Bundle.getArgument () не является нулевым - PullRequest
0 голосов
/ 04 ноября 2019

bundle.getArgumentes() не равно нулю, как я тестировал, используя Toast.makeText. Проверено условие для (bundle != null) и (bundle == null), оно говорит мне, что оно не равно нулю

Основная активность - эта функция находится внутри spinner.setOnItemSelectedListener. Я хочу передать выбранную информацию другому фрагменту

        @Override
        public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {

            String dateName = spinner.getSelectedItem().toString();
            Bundle bundle = new Bundle();
            bundle.putString("mymonth", dateName);
            HomeFragment homefrag = new HomeFragment();
            homefrag.setArguments(bundle);
            FragmentManager fragManager = getSupportFragmentManager();
            fragManager.beginTransaction().replace(R.id.fragment_container,homefrag).commit();

        }

HomeFragment - функция OnCreateView

public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View ListView = inflater.inflate(R.layout.fragment_home,container,false);
    bundle = this.getArguments();
    if(bundle == null){
        Toast.makeText(getActivity(),
                "lolol",
                Toast.LENGTH_SHORT)
                .show();
    }

    //String myMonth = bundle.getString("mymonth"); //if i uncomment this, it will cause app crash
    return ListView;
}

Ответы [ 4 ]

0 голосов
/ 04 ноября 2019

Попробуйте код ниже в вашем HomeFragment

@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    Bundle bundle = getArguments();
    if (bundle != null) {
        String myMonth = bundle.getString("mymonth");
    }
}
0 голосов
/ 04 ноября 2019

Изменен ваш метод onCreateView для целевого фрагмента, как показано ниже.

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

    View listView = inflater.inflate(R.layout.fragment_home,container,false);
    if(getArguments()!= null){
        bundle = getArguments()
        String myMonth = bundle.getString("mymonth");
     } else {  
        Toast.makeText(getActivity(),
                "lolol",
                Toast.LENGTH_SHORT)
                .show();
     }
    return listView;
}
0 голосов
/ 04 ноября 2019

Вы проверяете неправильно, не совпадаете с представлением счетчика и получаете выбранный элемент. Это неправильный способ.

Получить из функции обратного вызова onItemSelected (). Вы получите адаптер и позицию.

 ArrayAdapter adapter = new ArrayAdapter(//Set the values);     
 spinner.adapter = adapter

 @Override
    public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l){
        String dateName = adapter.getItem(i) ;
        **(OR String dateName = adapterView.getAdapter().getItem(i).toString())** 
        Bundle bundle = new Bundle();
        if(dateName != null)
            bundle.putString("myMonth", dateName);
        HomeFragment homefrag = new HomeFragment();
        homefrag.setArguments(bundle);
        FragmentManager fragManager = getSupportFragmentManager();
        fragManager.beginTransaction().replace(R.id.fragment_container,homefrag).commit();
}

onCreateView для HomeFragment

public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View ListView = inflater.inflate(R.layout.fragment_home,container,false);
    Bundle bundle = this.getArguments();
    if(bundle !=null && bundle.containsKey("myMonth"))
       String myMonth = bundle.getString("myMonth"); 
    return ListView;
}

Используйте KEY как глобальный, он может быть объявлен иным образом по-разному. Лучше использовать КЛЮЧ в глобальной декларации

0 голосов
/ 04 ноября 2019

Здесь вам нужно проверить, что getArguments () имеет значение null или нет. см. код ниже,

public View onCreateView(@NonNull LayoutInflater inflater, @Nullable 

ViewGroup container, @Nullable Bundle savedInstanceState) {
            View ListView = inflater.inflate(R.layout.fragment_home,container,false);
            if(this.getArguments()!=null){
             bundle = this.getArguments()
                if(bundle == null){
                   Toast.makeText(getActivity(),
                        "lolol",
                        Toast.LENGTH_SHORT)
                        .show();
                 }else{
                     String myMonth = bundle.getString("mymonth");
                 }
           }else{
            // else part Here
           }

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