Adding Assigned Values in Spinner NullPointerException

社会主义新天地 提交于 2019-12-13 04:38:22

问题


Like in my previous post: Adding Integers from Different Fragments in a ViewPager

But now, I'm trying to assign a value in the spinner of FragA and add it to the int of FragB. Like the previous post, the sum will be on the FragC. Here's my code:

FragA

public class FragA extends Fragment{ 

    Spinner spinner1;
    String s1; 

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

        spinner1 = (Spinner) getActivity().findViewById(R.id.spinner1);     
        spinner1.setOnItemSelectedListener(new OnItemSelectedListener() {

            @Override
            public void onItemSelected(AdapterView<?> arg0, View arg1,
                    int arg2, long arg3) {

                s1 = spinner1.getSelectedItem().toString();
                getInt(s1);
            }

            @Override
            public void onNothingSelected(AdapterView<?> arg0) {

            }
        });     
        return inflater.inflate(R.layout.fraga, container, false);    
    }

    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);

        ArrayAdapter<CharSequence>  adapter_a = ArrayAdapter.createFromResource(getActivity(), R.array.spinner1,android.R.layout.simple_spinner_item );
        spinner1.setAdapter(adapter_a);
    }

    public int getInt(String s1) {

        int a = 0;

        if(s1.equals("Hello")) {
            a = 5;
        }
        else if(s1.equals("Hi")) {
            a = 10; 
        }  

        return a;    
    }

}

FragB

public class FragB extends Fragment{

        int b = 20;

        public int getInt() {

            return b;
        }

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

            return inflater.inflate(R.layout.fragb, container, false); 
        }

    }

MainActivity

public class MainActivity extends FragmentActivity {

    ViewPager viewPager = null; 

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

        viewPager = (ViewPager)findViewById(R.id.pager);    
        FragmentManager fragmentManager = getSupportFragmentManager();
        viewPager.setAdapter(new MyAdapter(fragmentManager));
    }

    public class MyAdapter extends FragmentStatePagerAdapter {  

            public MyAdapter (FragmentManager fm) {
                super(fm);
            }

            @Override
            public Fragment getItem(int i) {
                Fragment fragment = null;

                if (i == 0)
                {
                    fragment = new FragA();
                }
                if (i == 1)
                {
                    fragment = new FragB();
                }
                if (i == 2)
                {
                    fragment = new FragC(); 
                }
                return fragment;
            }

            @Override
            public int getCount() {
                return 3;
            }   
        }

    public String sum() {

        FragA FragA = new FragA();
        FragB FragB = new FragB();
        return Integer.valueOf(FragA.getInt() + FragB.getInt());
    }

}

FragC

public class FragC extends Fragment{

    Button button;
    TextView textView;

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

        View v = inflater.inflate(R.layout.fragc, container, false); 

        textView = (TextView)v.findViewById(R.id.textview);
        button = (Button)v.findViewById(R.id.button);
        button.setOnClickListener(Click);

        return v;
    }

    OnClickListener Click = new OnClickListener() { 

        @Override
        public void onClick(View v) {

            textView.setText(((MainActivity)getActivity()).sum());

        }
    };

}

Error at MainActivity getInt() saying "the method getInt() in the type FragA is not applicable for the arguments()"


回答1:


Put this line in onCreateView

spinner1 = (Spinner) getActivity().findViewById(R.id.spinner1); 



回答2:


-> spinner1 = (Spinner) getActivity().findViewById(R.id.spinner1);

replace that with

Spinner spinner1 = (Spinner) getView().findViewById(R.id.spinner1);



回答3:


Try this..

Use that in onCreateView

       @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {
            View view = inflater.inflate(R.layout.fraga, container, false); 
            spinner1 = (Spinner) view.findViewById(R.id.spinner1);
            ArrayAdapter<CharSequence>  adapter_a = ArrayAdapter.createFromResource(getActivity(), R.array.spinner1,android.R.layout.simple_spinner_item );
            spinner1.setAdapter(adapter_a);
            return view;
        }

Example :

public class FragA extends Fragment{

        Spinner spinner1;

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {
           View view = inflater.inflate(R.layout.fraga, container, false); 
            spinner1 = (Spinner) view.findViewById(R.id.spinner1);
            ArrayAdapter<CharSequence>  adapter_a = ArrayAdapter.createFromResource(getActivity(), R.array.spinner1,android.R.layout.simple_spinner_item );
            spinner1.setAdapter(adapter_a);
            return view;
        }

        public int getInt() {

            int a = 0;

            String s1 = spinner1.getSelectedItem().toString();

            if(s1.equals("Hello")) {
                a = 5;
            }
            else if(s1.equals("Hi")) {
                a = 10; 
            }   
            return a;       
        }

        public void onActivityCreated(Bundle savedInstanceState) {
            super.onActivityCreated(savedInstanceState);

        }

    }



回答4:


As onActivityCreated method is always called before the onCreateView and as you are trying to initialize your Spinner its not getting view.

Initialize your Spinner in onCreateView

EDITED:

Try to get your selected item by implementing the setonItemClickListener for your Spinner as below:

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

        spinner1 = (Spinner) getActivity().findViewById(R.id.spinner1);

        spinner1 .setOnItemSelectedListener(new OnItemSelectedListener() {

        @Override
        public void onItemSelected(AdapterView<?> arg0, View arg1,
                int arg2, long arg3) {
             s1 = spinner1.getSelectedItem().toString();
                             getInt(s1);
        }

        @Override
        public void onNothingSelected(AdapterView<?> arg0) {
            // TODO Auto-generated method stub

        }
    });
        return inflater.inflate(R.layout.fraga, container, false); 

    }

Also change yout getInt() method as below by passing the parameter of the value which is selected.

 public int getInt(String s1) {

        int a = 0;
        if(s1.equals("Hello")) {
            a = 5;
        }
        else if(s1.equals("Hi")) {
            a = 10; 
        }   
        return a;       
    }


来源:https://stackoverflow.com/questions/20649497/adding-assigned-values-in-spinner-nullpointerexception

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!