以两种不同的布局将数据从一个片段发送到另一个片段

时间:2016-05-26 12:04:40

标签: java android

我是android的初学者。我在我的应用程序中创建了两个片段,其中一个活动在片段中我添加了一个ExpanadableListview和两个editText ...以及一个onclick按钮... for onclickbutton我正在进行片段替换..我点击按钮..我想将所有数据传递给fragment2..reuseIt ..我有一些困惑..我应该使用..bundle..or..interface concept..can任何人都可以帮助我..

下面是fragment1 ..替换代码..

@Override
public void onClick(View view) {
  FragmentTransaction ft;
  ft = fm.beginTransaction();
  Frag2New frag2New = new Frag2New();
  ft.replace(R.id.total_content, frag2New);
  ft.addToBackStack(null);
  ft.commit();
}

5 个答案:

答案 0 :(得分:1)

您可以使用Interface在片段之间传递数据。 声明一个接口:

<a  href="" onclick="add('{{ $res->driver_id }}');"><i class="fa fa-pencil-square-o"></i></a> 

}

在LayoutOne.java片段上:

public interface OnButtonPressListener {
public void onButtonPressed(String msg,int value,ArrayList<Object> arrData);
片段2上的

public class LayOutOne extends Fragment {

OnButtonPressListener buttonListener;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
     ViewGroup root = (ViewGroup) inflater.inflate(R.layout.layout_one, null);
      Button but=(Button)root.findViewById(R.id.button1);
      but.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            buttonListener.onButtonPressed("Message From First Fragment",1,ArrayList objct);
        }
    });
    return root;
}

 @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
        try {
            buttonListener = (OnButtonPressListener) getActivity();
        } catch (ClassCastException e) {
            throw new ClassCastException(activity.toString() + " must implement onButtonPressed");
        }
    }

答案 1 :(得分:1)

您应该使用Bundle将数据从一个片段发送到第二个片段。 使用非常简单

将数据从Frag1发送到Frag2

FragmentTransaction ft;
ft = fm.beginTransaction();
Frag2 f2 = new Frag2();
Bundle b = new Bundle();
b.putString("UNIQUE_KEY","YOURDATA");

f2.setArguments(b);
ft.replace(R.id.total_content, frag2New);
ft.addToBackStack(null);
ft.commit();

在Frag2中接收数据

    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
    View view = inflater.inflate(...);
    Bundle b = getArguments();
    if(b!==null)
    {
        String data = b.getString("UNIQUE_KEY");
        //doing something with this data 
    }
 }

基本上你也可以在包内传递对象和其他基元(int / float / double / long)

答案 2 :(得分:0)

活动:

public class YourActivity{
    private List<String> mYourSharedList;

    public List<String> getMyList(){ 
        return mYourSharedList;
    }
}

来自此活动的任何片段:

public class YourFragment extends Fragment {
    private List<String> mMyListInFragment;

    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
         mMyListInFragment = ((YourActivity)getActivity()).getMyList();
    }
}

mMyListInFragment - 将指向活动中的列表,因此如果您将获得这样的列表,您将在所有片段中使用相同的列表。

答案 3 :(得分:0)

我发现在不同组件之间发送数据的最简单方法是library.设置并开始使用非常简单,它可以节省大量时间,因为不仅可以发送字符串,您可以使用捆绑包整数,也可以发送自己的自定义对象。

答案 4 :(得分:0)

有很多方法可以在片段之间共享数据,这取决于你的需求,有样本应用试试这个希望它能解决你的问题。 https://developer.android.com/training/basics/fragments/communicating.html

相关问题