簡體   English   中英

在Viewpager NullPointerException中將微調器的指定值從片段傳遞到片段

[英]Passing Assigned Value of a Spinner from Fragment to Fragment within Viewpager NullPointerException

我使它更加簡單,並根據上一篇文章中的答案對其進行了更新: 在Spinner中添加分配的值NullPointerException

我有一個使用ViewPager一個MainAcitivty。 我的MainActivity中有2個片段(FragA和FragB)

在我的FragA中,我有一個微調器 FragB中 ,我有一個TextView和一個Button

現在我想做的是,當我在微調器中選擇“ Hello”時,我的int值將為5。當我單擊Button時,TextView中將顯示5。

這是我的代碼:

片段

public class FragA extends Fragment {

    Spinner spinner1;
    String s1;

    @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);

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

        return view;
    }

    public int getInt() {

        int a = 0;

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

        return a;    
    }

}

主要活動

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();
                }
                return fragment;
            }

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

    public String get() {

        FragA FragA = new FragA();

        return Integer.toString(FragA.getInt());
    }
}

片段B

public class FragB extends Fragment{

    TextView textView;

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

        View view = inflater.inflate(R.layout.fragb, container, false); 

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

        return view;
    }

    OnClickListener Click = new OnClickListener() { 

        @Override
        public void onClick(View v) {

            textView.setText(((MainActivity)getActivity()).get());          
        }
    };

}

順便說一句,當這是我的代碼時,將a的值從FragA傳遞給FragB毫無問題:

public int getInt() {

        int a = 5;

        return a;    
    }

但是,它不涉及我的微調器,那不是我想要做的。

這是片段之間進行通信的一種簡單方法

在MainActivity中,保留片段的靜態實例。

public static FragA fragmentA;
public static FragB fragmentB;

現在,如果要從FragA訪問FragB,請編寫類似以下內容:

((MainActivity) getActivity()).fragmentB.setSomething();

這是片段之間進行通信的更好/合適的方法

http://developer.android.com/training/basics/fragments/communicating.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM