Pasar parámetros de Android FragmentActivity a Fragment

Cuando estoy tratando de pasar un parámetro de FragmentActivity a un fragmento que me da la excepción puntero nulo en el getArguments () en el fragmento.

Aquí está mi FragmentActivity Code

public class IndexChartActivity extends FragmentActivity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.index_chart); IndexFragmentActivity indexFragment = (IndexFragmentActivity)getSupportFragmentManager().findFragmentById(R.id.index_fragment); indexFragment.newInstance("ASPI"); } } 

Aquí está el index_chart.xml

  <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#FFFFFF" android:orientation="vertical" > <fragment android:id="@+id/header_fragment" android:name="com.lk.ignitionit.cse.util.HeaderFragmentActivity" android:layout_width="match_parent" android:layout_height="wrap_content" /> <fragment android:id="@+id/index_fragment" android:name="com.lk.ignitionit.cse.util.IndexFragmentActivity" android:layout_width="match_parent" android:layout_height="wrap_content" /> <fragment android:name="com.lk.ignitionit.cse.util.ChartFragmentActivity" android:layout_width="match_parent" android:layout_height="wrap_content" /> </LinearLayout> 

Y aquí está el fragmento

 public class IndexFragmentActivity extends Fragment { protected ImageView ivASPI; protected ImageView ivMPI; protected ImageView ivSP; protected TextView tvMain; protected TextView tvTop; protected TextView tvBottom; String response = null; String result = null; String [] resultArr = null; Bundle b = new Bundle(); String indexType = null; int layout; IndexFragmentActivity f = null; public IndexFragmentActivity newInstance(String index) { f = new IndexFragmentActivity(); Bundle args = new Bundle(); args.putString("indextype", index); f.setArguments(args); return f; } public String getSelectedIndex() { return f.getArguments().getString("indextype"); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { if(getSelectedIndex().equals("ASPI")){ layout = R.layout.aspi_header; }else if(getSelectedIndex().equals("MPI")){ layout = R.layout.mpi_header; }else{ layout = R.layout.sp_header; } View view = inflater.inflate(layout, container, false); tvMain = (TextView) view.findViewById(R.id.tv_main); tvTop = (TextView) view.findViewById(R.id.tv_top); tvBottom = (TextView) view.findViewById(R.id.tv_bottom); new ServiceAccess().execute(""); tvMain.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { b.putString("type", "S&P SL20"); Activity activity = getActivity(); Intent intent = new Intent(activity, IndexChartActivity.class); intent.putExtras(b); startActivity(intent); } }); return view; } } 

Y aquí está mi ERROR

 Caused by: java.lang.NullPointerException at com.lk.ignitionit.cse.util.IndexFragmentActivity.getSelectedIndex(IndexFragmentActivity.java:69) 

Me referí a lotes de preguntas de stackoverflow relevantes a esto y probé el código de ejemplo dado http://developer.android.com/guide/components/fragments.html también. Pero aún no hay suerte

Realmente aprecio cualquier feed back en esto como esto parece ser un tema muy básico que no puedo entender ..

Gracias por adelantado

  1. Deshágase de Activity de los nombres de todas las clases que no heredan de Activity . Por ejemplo, IndexFragmentActivity no es una Activity .

  2. En onCreate() de su actividad actual, está llamando a findFragmentById() para recuperar un fragmento, y luego llamando a newInstance() en ese fragmento. Sin embargo, el fragmento no existirá la primera vez que onCreate() se llame, y fallará aquí con una NullPointerException . Por favor maneje correctamente este caso.

  3. El nombre del método newInstance en Java se asocia más comúnmente con el patrón de fábrica , donde newInstance() es un método static utilizado en lugar de un constructor público para crear instancias de alguna clase. Su método newInstance() no es static . Esto causará confusión para los que vienen después de que usted mantenga el código.

  4. Llamar newInstance() en onCreate() , crear la nueva instancia de fragmento, y luego tirarlo, lo que es una pérdida de tiempo.

Por lo tanto, suponiendo que su instancia original de su fragmento (de donde getSelectedIndex() no tiene un conjunto de getSelectedIndex() argumentos, eso explicaría su NullPointerException en getSelectedIndex() .

Cuando estoy tratando de pasar un parámetro de FragmentActivity a un fragmento

Para pasar un parámetro a un fragmento recién creado , utilizando un método newInstance() static y los argumentos Bundle para crear el nuevo fragmento es perfectamente razonable.

Para pasar un parámetro a un fragmento que ya existe, simplemente llame a algún método setter en ese fragmento.

  • ¿Cómo puedo hacer una petición Volley JSONObject con un objeto personalizado como parámetro?
  • Android: ¿Cómo puedo pasar parámetros a OnPreExecute () de AsyncTask?
  • Android, KSoap2 y .NET Web Service w / parameters = Resultado NULL
  • ¿Son posibles los parámetros de strings.xml?
  • parámetros de glGenTexture?
  • Androide actividad clase constructor trabajando
  • Android.net.uri getQueryParameterNames () alternativa
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.