2017-08-29 64 views
-4

这是我的片段代码访问MainActivity.class抛出一个错误

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    final MainActivity mainActivity = new MainActivity(); 
    // Inflate the layout for this fragment 
    View view = inflater.inflate(R.layout.encrypt_fragment, container, false); 

    btn_selectin = (Button)view.findViewById(R.id.btn_import); 
    btn_encrypt = (Button)view.findViewById(R.id.btn_encrypt); 

    btn_selectin.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      mainActivity.test(); 
     } 
    }); 

    btn_encrypt.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      mainActivity.test1(); 
     } 
    }); 

    return view; 
} 

我想访问MainActivity.class方法

public void test(){ 
     textview = 1; 
     showFileChooser(); 
} 

    private void showFileChooser() { 
    Intent intent = new Intent(Intent.ACTION_GET_CONTENT); 
    intent.setType("*/*"); 
    intent.addCategory(Intent.CATEGORY_OPENABLE); 

    try { 
     startActivityForResult(
       Intent.createChooser(intent, "Select a File to Process"), FILE_SELECT_CODE); 
    } catch (android.content.ActivityNotFoundException ex) { 
     // Potentially direct the user to the Market with a Dialog 
     Toast.makeText(this, "Please install a File Manager.", Toast.LENGTH_SHORT).show(); 
    } 
} 

这段代码实例文件浏览器

FATAL EXCEPTION:main 进程:com.plane.fusionencryp,PID:7551 java.la ng.RuntimeException:无法启动活动ComponentInfo {com.plane.fusionencryp/com.plane.fusionencryp.MainActivity}:android.view.InflateException:二进制XML文件行#109:二进制XML文件行#109:错误的文件扩展类片段 android.app.ActivityThread.-wrap11(Unknown Source:0)在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2817) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2892) at android .app.ActivityThread $ H.handleMessage(ActivityThread.java:1593) at android.os.Handler.dispatchMessage(Handler.java:105) at android.os.Looper.loop(Looper.java:164) at android .app.ActivityThread.main(ActivityThread.java:6541) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.Zygote $ MethodAndArgsCaller.run(Zygote.java:240) at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:767)

+0

替换'mainActivity.test();''到((MainActivity)getActivity())测试();' –

+0

不能使用的活动这样。如果片段包含在主要活动中,则可以从片段中调用getActivity()并获得该活动的一个实例。否则,无论是将该方法公开还是静态以访问该方法(这不是一个好主意,但它起作用),或者在Utils类中提取并在那里调用它 –

回答

1

你在做什么是创造的MainActivity Class 这是越来越活动实例的错误的方式一个新的实例。

这是你的问题。

final MainActivity mainActivity = new MainActivity();mainActivity.test();

但是你想要的是持有该片段在MainActivity的实例。所以在片段中,你可以这样做。

((MainActivity)getActivity()).test(); 
0

您可以通过强制转换获得父级活动。

((MainAcitivty)getActivity).test() 

记住:MainActivity应该是你的片段父活动