如何将数据从主活动发送到片段

时间:2014-09-23 03:02:45

标签: android android-fragments

public class MyActivity extends Activity implements ButtonFragement.OnFragmentInteractionListener, TextFragment.OnFragmentInteractionListener,Communicator {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_my);
        ButtonFragement btnfrg=new ButtonFragement();
        TextFragment txtfrg= new TextFragment();
        FragmentManager fm=getFragmentManager();
        FragmentTransaction ft=fm.beginTransaction();
        ft.add(R.id.my_activity,btnfrg,"Fragment");
        ft.add(R.id.my_activity,txtfrg,"Second Fragment");
        ft.commit();
    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.my, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }

    @Override
    public void onFragmentInteraction(Uri uri) {

    }

    @Override
    public void respond(String data) {
        FragmentManager fm=getFragmentManager();
        TextFragment f1= (TextFragment) fm.findFragmentById(R.id.textfrg);
        f1.changeText(data);

    }
}

这是我的main_Activity代码,这里我试图通过片段发送数据,但它在f1.changeText(数据)给我错误。我的项目的基本结构是,在主Activity上,我创建了两个片段。一个带按钮,另一个带文字。我想显示使用通信器接口在第二个片段上单击按钮的次数。在这里"数据"计数器显示单击按钮的次数,但我无法将其传输到第二个片段。


该计划的完整代码---

public interface Communicator {
    public void respond(String data);
}

TextFragment课程中我添加了这个方法----

  public void changeText(String data)
    {
        txt.setText(data);
    }

ButtonFragment类我添加并修改了以下方法

public class ButtonFragement extends Fragment implements View.OnClickListener{
    int counter=0;
    private OnFragmentInteractionListener mListener;
    Button btn;
    Communicator comm;

    @Override
    public void onActivityCreated(Bundle savedInstanceState)
    {
        super.onActivityCreated(savedInstanceState);
        comm= (Communicator) getActivity();
        btn= (Button) getActivity().findViewById(R.id.button);
        btn.setOnClickListener(this);
    }

    @Override
    public void onClick(View view) {
        counter++;
       // comm.respond("The button was clicked "+counter+" times");
        comm.respond("hi");
    }

在这里,我刚刚添加了我在程序中添加的内容。我的程序崩溃... MainActiviy f1.changeText(data); 但为什么我没有得到它。任何人都可以帮我解决这个错误吗?

4 个答案:

答案 0 :(得分:2)

    Bundle bundle = new Bundle();
    bundle.putString("key", value);

    // set Fragmentclass Arguments

    YourFragment ff= new YourFragment ();

    ff.setArguments(bundle);

    transaction.add(R.id.my_activity, ff);

答案 1 :(得分:1)

使用Bundle

来自活动:

Bundle bundle = new Bundle();
bundle.putString("message", "Hello!");
FragmentClass fragInfo = new FragmentClass();
fragInfo.setArguments(bundle);
transaction.replace(R.id.fragment_single, fragInfo);
transaction.commit();

<强>片段:

读取片段中的值

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
{
    String myValue = this.getArguments().getString("message");
    ...
    ...
}

答案 2 :(得分:0)

您没有ID为R.id.textfrg的片段。 您出于某种原因添加了两个标识为R.id.my_activity的片段。一个标记为"Fragment",另一个标记为"Second Fragment"。 所以你得到错误。 你的想法很严谨。 这可能会有所帮助

TextFragment f1= (TextFragment) fm.findFragmentByTag("Second Fragment");

答案 3 :(得分:0)

这样做:

  1. 在活动方面。

       Fragment fragment = new GridTemplate();
       Bundle bundle = new Bundle();
       bundle.putInt("index",your value);
       fragment.setArguments(bundle);
       FragmentManager fragmentManager = getFragmentManager();
            fragmentManager.beginTransaction()
                    .replace(R.id.frame_container, fragment).commit();
    
  2. 此处R.id.frame_container是一个框架布局或相对布局,您必须在其中添加片段。

    1. 在片段方面。

         int index = getArguments().getInt("index");  
      
    2. 希望这能解决你的问题。感谢