[英]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.