我按照android文档写了个例子,但是出现
java.lang.NullPointerException.
at com.example.testfragmentcom.fragmentb.UpdateTextView(fragmentb.java:35)
at com.example.testfragmentcom.MainActivity.onArticleSeleted(MainActivity.java:33)
at com.example.testfragmentcom.fragmenta$1.onClick(fragmenta.java:58)
有一个mainActivity,fragment a和fragment b.
1.mainActivity的代码:
public class MainActivity extends FragmentActivity implements fragmenta.OnHeadlineSelectedListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Fragment fa=(Fragment)fragmenta.newInstance();
FragmentTransaction ft=getSupportFragmentManager().beginTransaction();
ft.add(R.id.framelayouta, fa).commit();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public void onArticleSeleted(int position) {
// TODO Auto-generated method stub
fragmentb fb=(fragmentb)getSupportFragmentManager().findFragmentById(R.id.framelayoutb);
if(fb!=null){
if(position==0)
fb.UpdateTextView(0);
if(position==1)
fb.UpdateTextView(1);
}else{
fragmentb new_fb=fragmentb.newInstance();
}
}
}
2.fragment a的代码:
public class fragmenta extends Fragment {
private static final String TAG="fragment A";
OnHeadlineSelectedListener mCallback;
public interface OnHeadlineSelectedListener{
public void onArticleSeleted(int position);
}
public static fragmenta newInstance(){
fragmenta f=new fragmenta();
return f;
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
try{
mCallback =(OnHeadlineSelectedListener)activity;
}catch(ClassCastException e){
throw new ClassCastException(activity.toString()+"must implement OnHeadlineSelectedListener");
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v= inflater.inflate(R.layout.frangmenta_layout, container,false);
Button bt1=(Button)(v.findViewById(R.id.button1));
Button bt2=(Button)(v.findViewById(R.id.button2));
bt1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
mCallback.onArticleSeleted(0);
}
});
bt2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
mCallback.onArticleSeleted(1);
}
});
return v;
}
}
3.fragment b的代码:
public class fragmentb extends Fragment {
TextView tv;
public static fragmentb newInstance(){
fragmentb f=new fragmentb();
return f;
}
@Override
public void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// TODO Auto-generated method stub
View v=inflater.inflate(R.layout.fragmentb_layout, container,false);
tv=(TextView)v.findViewById(R.id.textView1);
return v;
}
public void UpdateTextView(int position)
{
if(position==0){
tv.setText(" you click button 0");
}
if(position==1){
tv.setText("you click button 1");
}
}
}fragment activity

解决方案 »

  1.   

    debug一下,看看onAttach中
    mCallback =(OnHeadlineSelectedListener)activity
    这个有没有执行到
      

  2.   

    下面是所有的error
    threadid=1: thread exiting with uncaught exception (group=0x409961f8)
    FATAL EXCEPTION: main
    java.lang.NullPointerException
    at com.example.testfragmentcom.fragmentb.UpdateTextView(fragmentb.java:40)
    at com.example.testfragmentcom.MainActivity.onArticleSeleted(MainActivity.java:33)
    at com.example.testfragmentcom.fragmenta$1.onClick(fragmenta.java:58)
    at android.view.View.performClick(View.java:3480)
    at android.view.View$PerformClick.run(View.java:13983)
    at android.os.Handler.handleCallback(Handler.java:605)
    at android.os.Handler.dispatchMessage(Handler.java:92)
    at android.os.Looper.loop(Looper.java:137)
    at android.app.ActivityThread.main(ActivityThread.java:4340)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:511)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
    at dalvik.system.NativeStart.main(Native Method)
      

  3.   

    反正就是空指针呗,单步调试下看看哪个值是null,或者把UpdateTextView(怎么说方法名开头也要小写啊,好多命名不规范)注释了看看,怀疑哪块空指针就注释了,如果没有异常了,那就是那边有问题。