getString()导致应用崩溃。 bundle.getArgument()不为null

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;
}
shangkewocaoniquanji 回答:getString()导致应用崩溃。 bundle.getArgument()不为null

在这里,您需要检查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;
        }
,

针对目标片段修改了N = 5 rate = 5 principal = 10000 while principal <= 15000: simple = principal * (1 + (rate/100) * N) compound = principal * (1 + (rate/100)) ** N print(str(rate) + "%","$" + str(principal),"$" + str(simple),"$" + str(compound)) principal += 1000 if principal >= 15001: rate += 5 principal = 10000 if rate >= 20: principal = 15001 方法,如下所示。

onCreateView
,

您检查的是错误的,与微调器视图不匹配,并获得了所选的项目。这是错误的做法。

从回调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();
}

onFragment的onCreateView

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

使用KEY作为Global可能会声明和获取不同的密钥。最好在全局声明中使用KEY

,

尝试在HomeFragment中尝试以下代码

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

    Bundle bundle = getArguments();
    if (bundle != null) {
        String myMonth = bundle.getString("mymonth");
    }
}
本文链接:https://www.f2er.com/3168866.html

大家都在问