Java 更改片段和使用回调时的NullPointerException
我在更改片段方面有一个问题,我使用操作栏中的微调器来完成此操作,有时还使用AlertDialog中的按钮。当我按下按钮时,我有空点异常。 这是我的接口回调代码:Java 更改片段和使用回调时的NullPointerException,java,android,android-fragments,nullpointerexception,callback,Java,Android,Android Fragments,Nullpointerexception,Callback,我在更改片段方面有一个问题,我使用操作栏中的微调器来完成此操作,有时还使用AlertDialog中的按钮。当我按下按钮时,我有空点异常。 这是我的接口回调代码: public interface Callback { public void load(String name); } 这是我的第一个片段的代码,我在OnCreateOptionMenu中使用微调器: private Callback callback; @Override public void onAttach
public interface Callback {
public void load(String name);
}
这是我的第一个片段的代码,我在OnCreateOptionMenu中使用微调器:
private Callback callback;
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
Log.d("TAG", "onAttach");
try {
callback = (Callback) activity;
} catch (ClassCastException e) {
throw new ClassCastException(activity.toString() + " must implement interface");
}
}
@Override
public void onDetach() {
super.onDetach();
callback = null;
}
public void onCreateOptionsMenu(Menu menu, MenuInflater inflate) {
menu.clear();
inflate.inflate(R.menu.kfu, menu);
spinner = (Spinner) menu.findItem(R.id.action_spinner).getActionView()
.findViewById(R.id.actionbar_spinner_change_map);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity()
.getBaseContext(),
android.R.layout.simple_spinner_dropdown_item, actions);
spinner.setAdapter(adapter);
spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view,
int position, long id) {
Log.d("POSITION", "Position is = "+position);
switch (position) {
case 1:
if (parent.getItemAtPosition(position).equals("VKNews")) {
// Log.d("Tag", callback.toString()+" "+ (callback == null) + " " + parent.getItemAtPosition(position));
callback.load("VKNews"); //305 line
}
}
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
// TODO Auto-generated method stub
}
});
}
我的活动:
public class GeneralActivity extends Activity implements Callback {
...
@Override
public void load(String name) {
FragmentTransaction transaction = getFragmentManager()
.beginTransaction();
Log.d("TAG", "transaction = " + transaction + " "
+ (transaction == null));
if (name.equals("KFUNews")) {
transaction.replace(R.id.general_fragment, kfu);
transaction.commit();
invalidateOptionsMenu();
} else {
transaction.replace(R.id.general_fragment, vkfrag);
transaction.commit();
invalidateOptionsMenu();
}
}
}
更新:它在Android 4.2.2和4.3、4.4上不起作用有三种可能:
回调
activity
该活动可能实现了错误的接口。回调是众多接口的名称。确保为接口使用唯一的名称或更改
GeneralActivity extends活动实现回调
到
GeneralActivity extends活动实现了ru.fosslabs.mobilestudent.fragment.KFUFragment.Callback
您的活动实现了回调接口吗?是的。公共类GeneralActivity扩展活动实现回调{
10-01 15:34:58.532: E/AndroidRuntime(2519): FATAL EXCEPTION: main
10-01 15:34:58.532: E/AndroidRuntime(2519): java.lang.NullPointerException
10-01 15:34:58.532: E/AndroidRuntime(2519): at ru.fosslabs.mobilestudent.fragment.KFUFragment$3.onItemSelected(KFUFragment.java:305)
10-01 15:34:58.532: E/AndroidRuntime(2519): at android.widget.AdapterView.fireOnSelected(AdapterView.java:892)
10-01 15:34:58.532: E/AndroidRuntime(2519): at android.widget.AdapterView.access$200(AdapterView.java:49)
10-01 15:34:58.532: E/AndroidRuntime(2519): at android.widget.AdapterView$SelectionNotifier.run(AdapterView.java:860)
10-01 15:34:58.532: E/AndroidRuntime(2519): at android.os.Handler.handleCallback(Handler.java:730)
10-01 15:34:58.532: E/AndroidRuntime(2519): at android.os.Handler.dispatchMessage(Handler.java:92)
10-01 15:34:58.532: E/AndroidRuntime(2519): at android.os.Looper.loop(Looper.java:137)
10-01 15:34:58.532: E/AndroidRuntime(2519): at android.app.ActivityThread.main(ActivityThread.java:5103)
10-01 15:34:58.532: E/AndroidRuntime(2519): at java.lang.reflect.Method.invokeNative(Native Method)
10-01 15:34:58.532: E/AndroidRuntime(2519): at java.lang.reflect.Method.invoke(Method.java:525)
10-01 15:34:58.532: E/AndroidRuntime(2519): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
10-01 15:34:58.532: E/AndroidRuntime(2519): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
10-01 15:34:58.532: E/AndroidRuntime(2519): at dalvik.system.NativeStart.main(Native Method)
public class GeneralActivity extends Activity implements Callback {
...
@Override
public void load(String name) {
FragmentTransaction transaction = getFragmentManager()
.beginTransaction();
Log.d("TAG", "transaction = " + transaction + " "
+ (transaction == null));
if (name.equals("KFUNews")) {
transaction.replace(R.id.general_fragment, kfu);
transaction.commit();
invalidateOptionsMenu();
} else {
transaction.replace(R.id.general_fragment, vkfrag);
transaction.commit();
invalidateOptionsMenu();
}
}
}