2015-03-21 5 views
0

Мне нужно передать две строки из первой вкладки во вторую вкладку. Хотя я писал этот код:Как передавать данные с одной вкладки салфетки на другую?

Map map = new Map(); 
      Bundle bundle = new Bundle(); 
      bundle.putString("Position", intent.getStringExtra("Position")); 
      map.setArguments(bundle); 
      Toast.makeText(context,"Visualizzare la posizione sulla mappa",Toast.LENGTH_SHORT).show(); 

в первом классе, и этот код:

Bundle args = getArguments(); 

    if(args != null) 
    { 
    Toast.makeText(getActivity().getBaseContext(),"Non è null",Toast.LENGTH_SHORT).show(); 
    String pos=args.getString("Position"); 
    String id=args.getString("ID"); 
    } 

во втором классе, мое приложение разбился. Я не понимаю, почему. Я много искал, чтобы найти причину, но я не понимаю, как я могу это сделать. Не могли бы вы рассказать мне, как передать эти две строки из первого фрагмента во второй фрагмент? Большое спасибо

+0

Но отправка только 'Position' и пытается получить' 'Position' и ID'? –

+0

Почему вы не сохраняете данные в 'SharedPreferences'? –

+0

Нет, мне нужно отправить две строки ... – Francesca

ответ

0

Для связи между фрагментами вы должны следовать этому процессу: - вы должны определить коммуникатор интерфейса между фрагментом и родительской активностью, а затем передать свои данные по заданным аргументам в комплекте.

Для определения интерфейса коммуникатора между фрагментами: 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) 
    { 
    } 

} 

}

+0

и как я могу отправить данные из родительской активности? – Francesca

+0

Взгляните на мой ответ снова –

+0

ОК, спасибо ... но я должен поместить интерфейс в новый класс? – Francesca

Смежные вопросы