JAVA - 将android应用程序转换为片段样式的应用程序

时间:2014-08-22 02:45:42

标签: java android android-fragments

我的应用有main.xmlMainActivity。我想将它转换为标签式风格的应用程序。在tutorial的帮助下,我成功地制作了带有标签式风格的用户界面。

现在我必须将代码放入我的MainActivty(非标签式样式)中。我不知道该怎么做。当我把代码放到我的ToolsFragment.java时,它不起作用。

以下是我的代码:

//To get ip address using netcfg
private String ipnc()
{
    int e = doNETCFG().indexOf("10.");
    if (e == -1)
    {
        return "";
    }
    else
    {
        String ipnc1 = doNETCFG().substring(e, e + 15);
        String ipnc2[] = ipnc1.split("/");
        String ipnc3 = ipnc2[0];
        return ipnc3;
    }
}

//To generate netcfg from command line
public String doNETCFG()
{
    String str = null;
    try
    {
        Process localProcess = Runtime.getRuntime().exec("/system/bin/netcfg");
        BufferedReader localBufferedReader = new BufferedReader(new InputStreamReader(localProcess.getInputStream()));
        char[] arrayOfChar = new char[4096];
        StringBuffer localStringBuffer = new StringBuffer();
        while (true)
        {
            int i = localBufferedReader.read(arrayOfChar);
            if (i <= 0)
            {
                localBufferedReader.close();
                localProcess.waitFor();
                str = localStringBuffer.toString();
                break;
            }
            localStringBuffer.append(arrayOfChar, 0, i);
        }
    }
    catch (IOException localIOException)
    {
        Log.e("TAG", localIOException.getStackTrace().toString());
    }
    catch (InterruptedException localInterruptedException)
    {
        Log.e("TAG", localInterruptedException.getStackTrace().toString());
    }
    return str;
}

//To enable/disable mobile data
private void setMobileDataEnabled(Context context, boolean enabled)
{
    final ConnectivityManager conman;
    conman =
        (ConnectivityManager)context.getSystemService 
    (Context.CONNECTIVITY_SERVICE);
    final Class conmanClass;
    try
    {
        conmanClass =
            Class.forName(conman.getClass
                          ().getName());
        final Field
            iConnectivityManagerField =
            conmanClass.getDeclaredField
        ("mService");
        iConnectivityManagerField.
            setAccessible(true);
        final Object
            iConnectivityManager =
            iConnectivityManagerField.get
        (conman);
        final Class
            iConnectivityManagerClass =
            Class.forName
        (iConnectivityManager.getClass
         ().getName());
        final Method
            setMobileDataEnabledMethod =
            iConnectivityManagerClass.
            getDeclaredMethod
        ("setMobileDataEnabled", Boolean.TYPE);
        setMobileDataEnabledMethod.
            setAccessible(true);
        setMobileDataEnabledMethod.invoke(iConnectivityManager, enabled);
    }
    catch
    (ClassNotFoundException e)
    {
        e.printStackTrace();
    }
    catch
    (InvocationTargetException e)
    {
        e.printStackTrace();
    }
    catch
    (NoSuchMethodException e)
    {
        e.printStackTrace();
    }
    catch
    (IllegalAccessException e)
    {
        e.printStackTrace();
    }
    catch
    (NoSuchFieldException e)
    {
        e.printStackTrace();
    }
}

//To play success alert tone
public void playAlertTone()
{
    new Thread()
    {
        public void run()
        {
            int i = 0;
            while (true)
            {
                if (i >= 1)
                    return;
                MediaPlayer localMediaPlayer = MediaPlayer.create(getApplicationContext(), 0x7f040000);
                localMediaPlayer.start();
                i++;
                try
                {
                    Thread.sleep(100 + localMediaPlayer.getDuration());
                    localMediaPlayer.release();
                }
                catch (InterruptedException localInterruptedException)
                {
                }
            }
        }
    }
        .start();
}

我该怎么办?我是否必须将其置于另一个活动中并将其称为片段?如果是这样,怎么样? 或者将其转换为片段中可执行的代码并在那里运行?我怎么能这样做?

我是Android编程的新手。谢谢!

2 个答案:

答案 0 :(得分:1)

当您将应用程序转换为基于片段的结构时,您必须考虑一个事件,即对于活动中的所有片段,上下文是相同的。您可以致电getActivity()获取。因此,首先保存您的上下文,并在您想要上下文的地方使用它。

根据您的问题,您正在使用标签开发应用程序。因此,您可能必须创建与选项卡一样多的片段。您可以将每个选项卡的代码放在相应的片段中。

现在要在片段之间进行通信,最好的方法是在父活动中使用回调。

可以找到实现片段的简单教程HERE

解释了片段之间的通信HERE

答案 1 :(得分:0)

片段完成活动的大部分工作。它们之所以被引入(至少是其中一个原因)是因为您可以将代码放在它们中而不是应用程序的活动中。如果你这么想,你会发现你只需要少量的活动。

我不确定你的意思&#34;将它转换为片段中的代码可执行文件&#34;。您可以将代码放在片段中(使用方法),然后简单地调用这些方法。

如果您不确定Fragments的工作原理,我强烈建议您阅读documentation

我希望这可以让您了解如何让代码在片段中运行。