http://developer.android.com/training/basics/fragments/communicating.htmlとhttp://developer.android.com/guide/components/fragments.html#の2つのリファレンスなど、さまざまなことを試しました。CommunicatingWithActivityとStackOverflowの他のユーザーの助けを借りて、ListFragment(FragmentA)に単純な文字列だけを別のListFragment(FragmentB)に送信させることができません。FragmentAのリストをクリックしてFragmentBに入ると、アプリがクラッシュし続け、NullPointerExceptionが発生します。私はこれに2日間立ち往生していて、壁に頭をぶつけたような気がします。誰かが何が悪いのか知っているなら、私の問題を解決するためにコードを投稿してください。
主な活動:
import com.example.fragmentcommunication.FragmentB.OnDataPass;
public class MainActivity extends Activity implements OnDataPass{
...
@Override
public void onCreate(Bundle savedInstanceState) {
...
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
// TODO Auto-generated method stub
String librarySelected = libraryList[position];
Fragment newFragment = null;
if (librarySelected.equals("Item1")){
newFragment = new FragmentA();
}
FragmentTransaction transaction = getFragmentManager().beginTransaction();
transaction.replace(R.id.tab2, newFragment, "FragA");
transaction.addToBackStack(null);
transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
transaction.commit();
}
});
}
public void onDataPass(String data) {
// TODO Auto-generated method stub
FragmentB transaction1 = ((FragmentB) getFragmentManager().findFragmentByTag("FragB"));
transaction1.use(data);
}
}
FragmentA:
public class FragmentA extends ListFragment{
...
OnDataPass dataPasser;
public interface OnDataPass{
public void onDataPass(String data);
}
@Override
public void onAttach(Activity a) {
super.onAttach(a);
// This makes sure that the container activity has implemented
// the callback interface. If not, it throws an exception
try {
dataPasser = (OnDataPass) a;
} catch (ClassCastException e) {
throw new ClassCastException(a.toString()
+ " must implement OnHeadlineSelectedListener");
}
}
@Override
public void onListItemClick(ListView l, View v, int position, long id) {
// TODO Auto-generated method stub
super.onListItemClick(l, v, position, id);
String libraryList;
//Get the position the user clicked.
Fragment newFragment = null;
libraryList = l.getItemAtPosition(position).toString();
dataPasser.onDataPass(libraryList);
if(libraryList.equals("Ranged")){
newFragment = new FragmentB();
}
FragmentTransaction transaction = getFragmentManager().beginTransaction();
transaction.replace(R.id.tab2, newFragment, "FragB");
transaction.addToBackStack(null);
transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
transaction.commit();
}
}
FragmentB:
public class FragmentB extends ListFragment{
...
String getListInfo;
@Override
public void onActivityCreated(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onActivityCreated(savedInstanceState);
//Testing to see if the String was passed from Fragment A.
System.out.println(getListInfo);
...
public void use(String data) {
// TODO Auto-generated method stub
this.getListInfo = data;
}
}