如何对不同的片段采取行动

时间:2014-06-07 18:44:12

标签: android android-fragments

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

我不想通过点击按钮启动任何片段。我想在应用程序启动后立即开始,然后两个片段都会开始显示各自的图和数据。

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

修改

我附上了代码 PlotFragment.java(我想在启动应用程序时在其中一个片段中运行的文件)

package com.tempsensor;
import android.app.Fragment;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Toast;

public class PlotFragment extends FragmentActivity {

    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstancesState){
        Toast.makeText(this, "Plot Comes Here", Toast.LENGTH_LONG).show();
        return null;
    }
}

SecondActivity.java(包含我在其中创建两个片段的Activity的java文件)

package com.tempsensor;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.support.v4.app.FragmentActivity;

public class SecondActivity extends Activity implements OnClickListener {

    Button buttonexit;

    @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);

        getFragmentManager().beginTransaction().add(R.id.plot_fragment, new PlotFragment()).commit();

        getFragmentManager().beginTransaction().add(R.id.data_fragment, new DataFragment()).commit();

    }

    public void onClick(View arg0) {
        if (arg0==buttonexit)
        {
            System.exit(0);
        }

    }       
}

我在哪里犯了错误,理想的结果是,当应用程序启动时,这两个片段应该自动启动它们的任务,这里我只是尝试使用Toast打印文本。

3 个答案:

答案 0 :(得分:2)

如果我正确理解您的问题,您希望应用程序打开并显示已加载所有信息的两个片段,一个情节和另一个数据?

在启动的活动中,您正在创建一个片段并提交将其添加到容器的事务,对吗?您应该为另一个片段做同样的事情:创建它并提交一个事务,将它添加到另一个容器中。

这里有一些简单的代码来证明我的意思:

@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();

}

答案 1 :(得分:0)

因此,您可以在第二个片段中创建方法。此方法将返回所需的数据。 例如:您必须在当前活动中获取片段的instanse并调用此方法,如下所示:

for (Fragment f : getActivity().getFragmentManager().getFragments()) {
                            if (f instanceof SecondFragment) {
                                int data = ((SecondFragment) f).returnData();
                            }

答案 2 :(得分:0)

首先,我建议您更改将片段添加到布局的方式,如下所示:

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);
    }
}

Fragments班级中:

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;
}