Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.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 - Fatal编程技术网

Android 如何对不同的片段进行操作

Android 如何对不同的片段进行操作,android,android-fragments,Android,Android Fragments,我对android非常陌生,所以如果我的问题很明显,请原谅。我必须将屏幕分成两部分,并对每个片段进行操作。一部分绘制数据,另一部分显示数据。我已经使用了片段来分割屏幕,但我想知道如何将动作赋予每个片段,以便它一起开始 我不想通过点击按钮或其他方式启动任何片段。我希望应用程序一启动,两个片段就开始显示各自的绘图和数据 我们将非常感谢你在这方面的帮助 编辑 我已附上密码 PlotFragment.java(启动应用程序时,我希望在其中一个片段中运行的文件) SecondActivity.java(包

我对android非常陌生,所以如果我的问题很明显,请原谅。我必须将屏幕分成两部分,并对每个片段进行操作。一部分绘制数据,另一部分显示数据。我已经使用了片段来分割屏幕,但我想知道如何将动作赋予每个片段,以便它一起开始

我不想通过点击按钮或其他方式启动任何片段。我希望应用程序一启动,两个片段就开始显示各自的绘图和数据

我们将非常感谢你在这方面的帮助

编辑

我已附上密码 PlotFragment.java(启动应用程序时,我希望在其中一个片段中运行的文件)

SecondActivity.java(包含我在其中创建了两个片段的活动的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我也做了同样的事情,但我想我在成功地做这件事时犯了一些错误。当你说“嵌入”时,我想它们是在
活动
布局中定义的,使用的是
。我将发布一个答案,但与您所做的非常相似。是的,您正确理解了我的问题,我已在编辑中包含了我的代码。你能指出实现我目标的正确方法吗。