Для связи между фрагментами вы должны следовать этому процессу: - вы должны определить коммуникатор интерфейса между фрагментом и родительской активностью, а затем передать свои данные по заданным аргументам в комплекте.
Для определения интерфейса коммуникатора между фрагментами: http://developer.android.com/training/basics/fragments/communicating.html
Чтобы задать аргументы:
Fragment fragment = new Fragment();
final Bundle bundle = new Bundle();
bundle.putString("data", data);
Log.i("BUNDLE", bundle.toString());
fragment.setArguments(bundle);
Вот процесс: Fragmenta --data -> FragmentActivity --data -> FragmentB
1 - Определить обратный вызов коммуникатора коммуникатора от фрагмента
interface communicate {
public void sendData(String data);
}
2 - в родительском деятельности реализовать этот communiactor
import android.os.Bundle;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentActivity;
import android.view.Menu;
public class MainActivity extends FragmentActivity implements communicate{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public void sendData(String data) {
// TODO Auto-generated method stub
// From fragments we can call this method with the help of reference of communicate.
}
}
3 - В первом фрагменте ребенка, мы должны получить экземпляр communiactor от о деятельности созданного:
public class FragmentA extends Fragment implements OnClickListener{
Button button;
communicate cm;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// TODO Auto-generated method stub
return inflater.inflate(R.layout.layout_fragmenta, container, false);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onActivityCreated(savedInstanceState);
**cm = (communicate) getActivity();**
button = (Button) getActivity().findViewById(R.id.button1);
button.setOnClickListener(this);
}
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
cm.sendData();
}
}
4 - в вашей родительской деятельности вы получить данные из METHODE SendData и передавать данные через fragmentB Bundle:
@Override
public void sendData(String data) {
// TODO Auto-generated method stub
Fragment fragment = new Fragment();
final Bundle bundle = new Bundle();
bundle.putString("data", data);
Log.i("BUNDLE", bundle.toString());
fragment.setArguments(bundle);
}
5 - наконец; получить данные из FragmentB путем получают методами аргументов:
общественного класса ExampleFragment расширяет фрагмент {
public static FragmentB newInstance()
{
FragmentB fragment = new FragmentB();
// arguments
Bundle arguments = new Bundle();
arguments.putString(ARGUMENT_PRODUCT_ID, productId);
fragment.setArguments(arguments);
return fragment;
}
public FragmentB() {}
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
// handle fragment arguments
Bundle arguments = getArguments();
if(arguments != null)
{
}
}
}
Но отправка только 'Position' и пытается получить' 'Position' и ID'? –
Почему вы не сохраняете данные в 'SharedPreferences'? –
Нет, мне нужно отправить две строки ... – Francesca