Java 在微调器NullPointerException中添加赋值
就像我之前的帖子: 但现在,我试图在FragA的微调器中赋值,并将其添加到FragB的int中。与前一篇文章一样,金额将在FragC上。这是我的密码: FragAJava 在微调器NullPointerException中添加赋值,java,android,android-fragments,nullpointerexception,android-spinner,Java,Android,Android Fragments,Nullpointerexception,Android Spinner,就像我之前的帖子: 但现在,我试图在FragA的微调器中赋值,并将其添加到FragB的int中。与前一篇文章一样,金额将在FragC上。这是我的密码: FragA public class FragA extends Fragment{ Spinner spinner1; String s1; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container,
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;
}
}
main活动
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()不适用于参数()”->spinner1=(Spinner)getActivity()。findViewById(R.id.spinner1)代码>
换成
Spinner spinner1 = (Spinner) getView().findViewById(R.id.spinner1);
将该行放在onCreateView中
spinner1 = (Spinner) getActivity().findViewById(R.id.spinner1);
AsonActivityCreated
方法总是在onCreateView
之前调用,并且当您尝试初始化微调器时,它无法获取视图
在onCreateView
编辑:
通过为微调器实现setonItemClickListener
,尝试获取所选项目,如下所示:
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);
}
试试这个
在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;
}
@覆盖
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
视图=充气机。充气(R.layout.fraga,容器,假);
spinner1=(Spinner)view.findViewById(R.id.spinner1);
ArrayAdapter_a=ArrayAdapter.createFromResource(getActivity(),R.array.spinner1,android.R.layout.simple_微调器_项);
喷丝头1.固定接头(接头a);
返回视图;
}
示例:
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);
}
}
公共类FragA扩展片段{
喷丝器喷丝器1;
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
视图=充气机。充气(R.layout.fraga,容器,假);
spinner1=(Spinner)view.findViewById(R.id.spinner1);
ArrayAdapter_a=ArrayAdapter.createFromResource(getActivity(),R.array.spinner1,android.R.layout.simple_微调器_项);
喷丝头1.固定接头(接头a);
返回视图;
}
公共int getInt(){
int a=0;
字符串s1=喷丝头1.getSelectedItem().toString();
如果(s1等于(“你好”)){
a=5;
}
else如果(s1等于(“Hi”)){
a=10;
}
返回a;
}
已创建ActivityState上的公共无效(Bundle savedInstanceState){
super.onActivityCreated(savedInstanceState);
}
}
FragA.java中第18行有什么?@Tamanna-String s1=spinner1.getSelectedItem().toString();spinner1为null或spinner1.getSelectedItem()为null您无法通过实例化该类来访问视图(Spinner)。我的意思是FragA-FragA=new-FragA()代码>不包含微调器实例。只有当前面的片段返回null时,才能访问视图exception@SathishKumar-那我该怎么办?我仍然在“String s1=spinner1.getSelectedItem().toString();”处得到NullPointerException…@user2942600也在onCreateView
中执行setadapter,就像我的编辑一样。@user2942600我检查了它,它正在工作。正确地在创建的活动中输入条目设置entiers已经晚了。在设置条目之前,我们将调用spinner1.getSelectedItem().toString()
,以使空指针。是。“字符串s1=spinner1.getSelectedItem().toString();”的NullPointerException“@user2942600是fraga
布局中的spinner1
。仍在“字符串s1=spinner1.getSelectedItem().toString();“我在MainActivity上出错”返回整数。toString(fraga.getInt()+FragB.getInt());”上显示“FragA类型中的方法getInt()不适用于参数()”@user2942600像这样尝试“返回Integer.valueOf(FragA.getInt()+FragB.getInt());“
如果要返回字符串
,请将返回类型更改为字符串
类似返回字符串.valueOf(FragA.getInt()+FragB.getInt());
或者如果只想返回Integer
,则需要将sum
方法的返回类型更改为String
例如public int sum(){……
当我将其更改为“return Integer.valueOf(FragA.getInt()+FragB.getInt());”或“return String.valueOf(FragA.getInt()+FragB.getInt())”;getInt()处出现错误,表示“FragA类型中的方法getInt()不适用于参数()
@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 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);
}
}