片段之间的意图和传递数据

时间:2016-10-26 08:25:53

标签: java android eclipse android-studio android-fragments

在我的第一个片段中,我有一个监听器,它会监听点击,当发生点击时,我想打开另一个片段并将数据传递给它。 我想知道如何在两个片段之间传递数据这是我到目前为止所拥有的。

这就是我在第一个片段中的内容

**Bundle b = getIntent().getExtras();
      if(b != null)
         value = b.getInt("key");
      if (getIntent().getIntExtra("Key", 0) != 0) {

      }**

这是我在第二个片段中的内容

touchImageView.setScrollX(290);
touchImageView.setScrollY(130);

3 个答案:

答案 0 :(得分:0)

首先创建新的侦听器接口:

public interface YourCustomListener {
    void onItemClick(int position, int ID);
}

现在将其添加到您的第一个片段:

YourCustomListener mListener;

你的片段onclick方法:

mListener.onItemClick(position,"YOUR ID");

在第一个片段中添加此方法:

@Override
    public void onAttach(Context con) {
        super.onAttach(con);
        try {
            mListener= (YourCustomListener ) con;
        } catch (ClassCastException e) {
            e.printStackTrace();
        }
    }

    @Override
    public void onDetach() {
        mListener=null;
        super.onDetach();
    }

在Activity类中实现接口。在派生方法中:

@Override
    public void onItemClick(int position,int ID) {
        fragment2 =new SecondFragment();
        Bundle arg= new Bundle();
        arg.putInt("ID",ID);
        arg.putString("title","ANY TITLE");
        fragment2.setArguments(arg);

        if (fragment2 != null) {
            FragmentManager fragmentManager = getSupportFragmentManager();
            FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
            fragmentTransaction.setCustomAnimations(R.anim.slide_left_enter,R.anim.slide_left_exit,R.anim.slide_left_enter,R.anim.slide_left_exit);
            fragmentTransaction.replace(R.id.container_body, fragment2,"PROF");
            fragmentTransaction.addToBackStack(null);
            fragmentTransaction.commit();
            getSupportActionBar().setLogo(null);
        }
    }

现在在你的第二个片段上,在创建方法中使用此:

Bundle pb=getArguments();
        h=pb.getInt("ID");
        title=pb.getString("title");

现在您拥有int h的值和String Title。您可以根据需要传递数据。

答案 1 :(得分:0)

在fragment_1中

Bundle i = new Bundle(); 
            i.putString("name", "Emmanuel");

            Fragment_1 frag = new Fragment_1();
            frag.setArguments(i);
            FragmentManager fragmentManager = getFragmentManager();
            fragmentManager.beginTransaction()
                    .replace(R.id.content_frame
                            , new Fragment_2())
                    .commit();

获取fragment_2中的数据

Intent intent = getActivity().getIntent();
    if (intent.getExtras() != null) {
        String name =intent.getStringExtra("name");
    }

或者您可以使用界面来完成。 Basic Communication between two fragments

答案 2 :(得分:0)

意图用于活动,而不是用于片段。因此,您无法通过调用“startActivity()”来启动片段。

您应该使用FragmentManager来管理您的碎片。

SecondFragment secondFragment = new SecondFragment(classificationGroup); getActivity().getSupportFragmentManager().beginTransaction() .add(R.id.fragment_container, secondFragment).commit();