Android 如何对不同的片段进行操作
我对android非常陌生,所以如果我的问题很明显,请原谅。我必须将屏幕分成两部分,并对每个片段进行操作。一部分绘制数据,另一部分显示数据。我已经使用了片段来分割屏幕,但我想知道如何将动作赋予每个片段,以便它一起开始 我不想通过点击按钮或其他方式启动任何片段。我希望应用程序一启动,两个片段就开始显示各自的绘图和数据 我们将非常感谢你在这方面的帮助 编辑 我已附上密码 PlotFragment.java(启动应用程序时,我希望在其中一个片段中运行的文件) SecondActivity.java(包含我在其中创建了两个片段的活动的java文件)Android 如何对不同的片段进行操作,android,android-fragments,Android,Android Fragments,我对android非常陌生,所以如果我的问题很明显,请原谅。我必须将屏幕分成两部分,并对每个片段进行操作。一部分绘制数据,另一部分显示数据。我已经使用了片段来分割屏幕,但我想知道如何将动作赋予每个片段,以便它一起开始 我不想通过点击按钮或其他方式启动任何片段。我希望应用程序一启动,两个片段就开始显示各自的绘图和数据 我们将非常感谢你在这方面的帮助 编辑 我已附上密码 PlotFragment.java(启动应用程序时,我希望在其中一个片段中运行的文件) SecondActivity.java(包
我犯了一个错误,期望的结果是,当应用程序启动时,这两个片段应该自动开始它们的任务,在这里,我只是尝试使用Toast打印文本。如果我正确理解了您的问题,您希望应用程序打开并显示两个片段,并且它们的所有信息都已加载,其中一个是绘图,另一个是数据 在启动的活动中,您正在创建一个片段并提交一个将其添加到容器中的事务,对吗?您只需对另一个片段执行相同的操作:创建它并提交一个事务,将其添加到另一个容器中 下面是一些简单的代码,演示了我的意思:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getFragmentManager().beginTransaction()
.add(R.id.plot_container, new PlotFragment()).commit();
getFragmentManager().beginTransaction()
.add(R.id.data_container, new DataFragment()).commit();
}
所以,您可以在第二个片段中创建方法。此方法将返回所需的数据。 例如:您必须获取当前活动中片段的实例,并按如下方式调用此方法:
for (Fragment f : getActivity().getFragmentManager().getFragments()) {
if (f instanceof SecondFragment) {
int data = ((SecondFragment) f).returnData();
}
public class SecondActivity extends Activity implements OnClickListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.second);
buttonexit = (Button) findViewById(R.id.button1);
buttonexit.setOnClickListener(this);
PlotFragment plotFrag = new PlotFragment();
DataFragment dataFrag = new DataFragment();
addData(plotFrag);
addData(dataFrag);
getFragmentManager().beginTransaction().add(R.id.plot_fragment, plotFrag).commit();
getFragmentManager().beginTransaction().add(R.id.data_fragment, dataFrag).commit();
}
protected void addData(DataFragment dataFrag) {
Bundle args = new Bundle();
// Load data to args variable
dataFrag.setArguments(args);
}
protected void addData(PlotFragment plotFrag) {
Bundle args = new Bundle();
// Load plot data to args variable
plotFrag.setArguments(args);
}
}
首先,我建议您更改将片段添加到布局的方式,如下所示:
for (Fragment f : getActivity().getFragmentManager().getFragments()) {
if (f instanceof SecondFragment) {
int data = ((SecondFragment) f).returnData();
}
public class SecondActivity extends Activity implements OnClickListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.second);
buttonexit = (Button) findViewById(R.id.button1);
buttonexit.setOnClickListener(this);
PlotFragment plotFrag = new PlotFragment();
DataFragment dataFrag = new DataFragment();
addData(plotFrag);
addData(dataFrag);
getFragmentManager().beginTransaction().add(R.id.plot_fragment, plotFrag).commit();
getFragmentManager().beginTransaction().add(R.id.data_fragment, dataFrag).commit();
}
protected void addData(DataFragment dataFrag) {
Bundle args = new Bundle();
// Load data to args variable
dataFrag.setArguments(args);
}
protected void addData(PlotFragment plotFrag) {
Bundle args = new Bundle();
// Load plot data to args variable
plotFrag.setArguments(args);
}
}
在片段
类中:
public class DataFragment extends Fragment {
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstancesState){
Bundle args = getArguments() == null ? savedInstanceState : getArguments();
// Use args to setup Fragment content
Toast.makeText(this, "Data Comes Here", Toast.LENGTH_LONG).show();
return null;
}
public class PlotFragment extends Fragment {
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstancesState){
Bundle args = getArguments() == null ? savedInstanceState : getArguments();
// Use args to setup Fragment content
Toast.makeText(this, "Plot Comes Here", Toast.LENGTH_LONG).show();
return null;
}
您是否使用片段事务(添加片段)?或者片段嵌入到布局中?@Wakim片段嵌入到布局中。也许您可以使用其
标记检索片段
,并在活动
上的onCreate
(在设置内容视图
之后)上设置片段
数据。它不起作用?@Wakim我也做了同样的事情,但我想我在成功地做这件事时犯了一些错误。当你说“嵌入”时,我想它们是在活动布局中定义的,使用的是
。我将发布一个答案,但与您所做的非常相似。是的,您正确理解了我的问题,我已在编辑中包含了我的代码。你能指出实现我目标的正确方法吗。