2013-10-04 8 views
1

Для передачи значений к другому фрагменту у меня на ViewPager я делаю следующее:передачи данных между ViewPager фрагментами

FragmentA.java

//Initial Declaration 
ListPasser handler; 


public interface ListPasser{ 
    public void onPodCastClick(int position, String url, String title, String body, String date); 
} 


//I am implementing a ListView inside the fragment 
@Override 
public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
    Log.i(tag, mp3URL); 
    Log.i(tag, String.valueOf(position)); 
    Log.i(tag, pod_title); 
    Log.i(tag, pod_body); 
    Log.i(tag, pod_date); 
    handler.onPodCastClick(position, mp3URL, pod_title, pod_body, pod_date); 

} 

@Override 
public void onAttach(Activity activity) { 
    // TODO Auto-generated method stub 
    super.onAttach(activity); 
    try { 
     handler = (ListPasser) getActivity(); 

    } catch (ClassCastException e) { 
     Log.i(tag,"Activity " + getActivity().getClass().getSimpleName() 
      + " does not implement the ElemetsListClickHandler interface"); 
     e.printStackTrace(); 
    } 
} 

MainActivity.java (Реализация класса для ViewPager)

@Override 
public void onPodCastClick(int position, String url, String title, 
     String body, String date) { 
    // TODO Auto-generated method stub 
    Bundle element = new Bundle(); 
    element.putInt("position", position); 
    element.putString("mp3url", url); 
    element.putString("title", title); 
    element.putString("body", body); 
    element.putString("date", date); 

    Fragment toGo = new FragmentB(); 
    toGo.setArguments(element); 
    FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); 
    transaction.replace(R.id.pager, toGo); 
    transaction.commit(); 

} 

Frag mentB.java

TextView npTitle, npDate, npDescription; 


@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    View view = inflater.inflate(R.layout.now_playing_layout, container, false); 


    npTitle = (TextView)view.findViewById(R.id.npTitle); 
    npDate = (TextView)view.findViewById(R.id.npDate); 
    npDescription = (TextView)view.findViewById(R.id.npDescription); 

    Bundle element = this.getArguments(); 
    if(element != null){ 
    String title = element.getString("title"); 
    String url = element.getString("mp3url"); 
    String body = element.getString("body"); 

    npTitle.setText(title); 
    npDescription.setText(body); 
    } 
    else{ 
     npTitle.setText("Its null man"); 
     npDescription.setText("NULL POINTER EXCEPTION !"); 
    } 
    return view; 
} 

Когда я нажимаю элемент в FragmentA он должен пойти в FragmentB унося с информацией, как показывают в интерфейсе, но все это дает мне это пустой экран на FragmentA. Пожалуйста, помогите.

+0

Код выглядит ОК. В какой строке вы точно получаете NullPointerException? –

+0

@GaneshBhambarkar на самом деле не является исключением NullPointerException ... FragmentA не работает при нажатии. И когда я пытаюсь перейти к FragmentB, вот где я получаю NullPointerException в строке 'Bundle element = this.getArguments()' –

+0

Попробуйте получить значения 'Bundle' в контексте' getActivity.getArguments() 'в вашем FragmentB – GrIsHu

ответ

1

Вы можете попробовать использовать абстрактный класс для хранения значений в объекте. Затем используйте статический метод для получения значения из любого другого класса.

+1

что-то похожее на 'SharedPrefernces'? –

+0

Да, вы можете видеть это как контейнерный класс. Static означает, что это всегда одно и то же, поэтому вы можете вызвать статический метод для имени класса. не нужно создавать объект этого класса – JWqvist

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