我的应用有main.xml
和MainActivity
。我想将它转换为标签式风格的应用程序。在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编程的新手。谢谢!
答案 0 :(得分:1)
当您将应用程序转换为基于片段的结构时,您必须考虑一个事件,即对于活动中的所有片段,上下文是相同的。您可以致电getActivity()
获取。因此,首先保存您的上下文,并在您想要上下文的地方使用它。
根据您的问题,您正在使用标签开发应用程序。因此,您可能必须创建与选项卡一样多的片段。您可以将每个选项卡的代码放在相应的片段中。
现在要在片段之间进行通信,最好的方法是在父活动中使用回调。
可以找到实现片段的简单教程HERE
解释了片段之间的通信HERE
答案 1 :(得分:0)
片段完成活动的大部分工作。它们之所以被引入(至少是其中一个原因)是因为您可以将代码放在它们中而不是应用程序的活动中。如果你这么想,你会发现你只需要少量的活动。
我不确定你的意思&#34;将它转换为片段中的代码可执行文件&#34;。您可以将代码放在片段中(使用方法),然后简单地调用这些方法。
如果您不确定Fragments的工作原理,我强烈建议您阅读documentation。
我希望这可以让您了解如何让代码在片段中运行。