Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/208.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在android中替换片段时出现空指针异常_Android_Android Fragments_Nullpointerexception_Fragmenttransaction - Fatal编程技术网

在android中替换片段时出现空指针异常

在android中替换片段时出现空指针异常,android,android-fragments,nullpointerexception,fragmenttransaction,Android,Android Fragments,Nullpointerexception,Fragmenttransaction,我想从home Fragment调用ShowProductDetailFragment,但当我调用FragmentTransaction时,我得到了NullPointerException。 以下是错误日志: 06-24 21:35:21.484: E/AndroidRuntime(11633): FATAL EXCEPTION: main 06-24 21:35:21.484: E/AndroidRuntime(11633): Process: org.nick.yarntrading, PI

我想从home Fragment调用
ShowProductDetail
Fragment
,但当我调用
FragmentTransaction
时,我得到了
NullPointerException
。 以下是错误日志:

06-24 21:35:21.484: E/AndroidRuntime(11633): FATAL EXCEPTION: main
06-24 21:35:21.484: E/AndroidRuntime(11633): Process: org.nick.yarntrading, PID: 11633
06-24 21:35:21.484: E/AndroidRuntime(11633): java.lang.NullPointerException
06-24 21:35:21.484: E/AndroidRuntime(11633):    at org.nick.yarntrading.Home.callproductDetails(Home.java:63)
06-24 21:35:21.484: E/AndroidRuntime(11633):    at org.nick.card_view.DataListAdapter$1.onClick(DataListAdapter.java:90)
06-24 21:35:21.484: E/AndroidRuntime(11633):    at android.view.View.performClick(View.java:4463)
06-24 21:35:21.484: E/AndroidRuntime(11633):    at android.view.View$PerformClick.run(View.java:18770)
06-24 21:35:21.484: E/AndroidRuntime(11633):    at android.os.Handler.handleCallback(Handler.java:808)
06-24 21:35:21.484: E/AndroidRuntime(11633):    at android.os.Handler.dispatchMessage(Handler.java:103)
06-24 21:35:21.484: E/AndroidRuntime(11633):    at android.os.Looper.loop(Looper.java:193)
06-24 21:35:21.484: E/AndroidRuntime(11633):    at android.app.ActivityThread.main(ActivityThread.java:5292)
06-24 21:35:21.484: E/AndroidRuntime(11633):    at java.lang.reflect.Method.invokeNative(Native Method)
06-24 21:35:21.484: E/AndroidRuntime(11633):    at java.lang.reflect.Method.invoke(Method.java:515)
06-24 21:35:21.484: E/AndroidRuntime(11633):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:824)
06-24 21:35:21.484: E/AndroidRuntime(11633):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:640)
06-24 21:35:21.484: E/AndroidRuntime(11633):    at dalvik.system.NativeStart.main(Native Method)
这里是
Home
类,我从中得到了错误信息

import android.annotation.SuppressLint;
import android.app.Activity;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentTransaction;
 import android.support.v7.widget.PopupMenu.OnMenuItemClickListener;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ListView;
import android.widget.RelativeLayout;
import org.nick.card_view.DataListAdapter;


public class Home extends Fragment implements OnMenuItemClickListener{
App a;
ListView card_list;
DataListAdapter adapter;
RelativeLayout prodctView;
Activity act;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    a =(App)getActivity().getApplication();
    act = getActivity();
}
@SuppressLint("InflateParams") @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

     prodctView = (RelativeLayout)inflater.inflate(R.layout.home_listview,null);
        card_list = (ListView)prodctView.findViewById(android.R.id.list);
    adapter = new DataListAdapter(a,getActivity().getSupportFragmentManager());
    card_list.setAdapter(adapter);

    return prodctView;
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    // TODO Auto-generated method stub
    super.onCreateOptionsMenu(menu, inflater);
    inflater.inflate(R.menu.main, menu);
}
@Override
public boolean onMenuItemClick(MenuItem arg0) {
    // TODO Auto-generated method stub
    return false;
}
public void callproductDetails()
{

    Fragment d = new ShowProductDetail();
    FragmentTransaction ft =getActivity().getSupportFragmentManager().beginTransaction();
    ft.setCustomAnimations(R.anim.slide_right, android.R.anim.slide_out_right,
            android.R.anim.slide_in_left, android.R.anim.slide_out_right );
    ft.replace(R.id.frame, d);
    ft.commit();
}
@Override
 public void onResume() {
    // TODO Auto-generated method stub
    super.onResume();
    if(!((App)getActivity().getApplication()).fragmentStack.contains(this))
        ((App)getActivity().getApplication()).fragmentStack.add(this);
}
public void redirect()
{
  FragmentTransaction ft = ((FragmentActivity) act).getSupportFragmentManager().beginTransaction();
    ft.setCustomAnimations(R.anim.slide_right,android.R.anim.slide_out_right);
    ft.replace(R.id.frame, a.fragmentStack.lastElement()).commit();
}

 }
我正在调用
view.setOnclickListener
方法上的
DataListAdapter
类中的
callproductDetails()
方法。 任何想法都值得赞赏。
提前感谢…

基本上,我不建议使用

getActivity()
作为getSupportFragmentManager的上下文,因为getActivity()可以轻松返回null值并引发NullPointerException

尝试给出一个不同的上下文,或者至少用一个

if (getActivity() != null) 

至少你会确定你的上下文是你的问题。

你用
getChildFragmentManager()
而不是
getActivity().getSupportFragmentManager()尝试过吗
?为什么要从适配器中的片段调用方法,因为要将FragmentManager对象发送到适配器类,所以只需移动适配器类中的
callproductDetails
方法