【发布时间】:2013-12-18 20:01:24
【问题描述】:
就像我之前的帖子一样:Adding Integers from Different Fragments in a ViewPager
但是现在,我正在尝试在 FragA 的微调器中分配一个值并将其添加到 FragB 的 int 中。与上一篇文章一样,总和将在 FragC 上。这是我的代码:
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());
}
};
}
MainActivity getInt() 出错,提示“FragA 类型中的方法 getInt() 不适用于 arguments()”
【问题讨论】:
-
FragA.java 的第 18 行有什么?
-
@Tamanna - String s1 = spinner1.getSelectedItem().toString();
-
spinner1 为 null 或 spinner1.getSelectedItem() 为 null
-
您不能通过实例化该类来访问视图(Spinner)。我的意思是
FragA FragA = new FragA();不包含微调器实例。只有当您的片段在前面时才能访问您的视图,否则它会返回空异常 -
@SathishKumar - 那我该怎么办?
标签: java android android-fragments nullpointerexception android-spinner