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
- Apertura de linterna en android con diferentes modos
- Modificación de atributos anidados en un Layout incluido
- Obtenga la colección de nombres de parámetros de la url de Java / Android
- SQL Android Formulación de consultas con múltiples condiciones
- Cómo establecer dinámicamente los parámetros de diseño en Android?
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
- Android ArrayList <MyObject> pasar como parcelable
- Cómo crear un botón de Twitter en Android?
- Análisis bytecode de Android para parámetros de método
- ¿Cómo pasar el parámetro a un webservice usando ksoap2?
- Cómo enviar parámetros a un archivo local en un WebView en android?
- Cómo cambiar la velocidad de fotogramas de la cámara para crear vídeo de cámara lenta o lapso de tiempo en Android
- Android AsyncTask como argumento del método
- Algunos parámetros de función denominados arg0, arg1, etc ... después de compilar una biblioteca JAR
-
Deshágase de
Activity
de los nombres de todas las clases que no heredan deActivity
. Por ejemplo,IndexFragmentActivity
no es unaActivity
. -
En
onCreate()
de su actividad actual, está llamando afindFragmentById()
para recuperar un fragmento, y luego llamando anewInstance()
en ese fragmento. Sin embargo, el fragmento no existirá la primera vez queonCreate()
se llame, y fallará aquí con unaNullPointerException
. Por favor maneje correctamente este caso. -
El nombre del método
newInstance
en Java se asocia más comúnmente con el patrón de fábrica , dondenewInstance()
es un métodostatic
utilizado en lugar de un constructor público para crear instancias de alguna clase. Su métodonewInstance()
no esstatic
. Esto causará confusión para los que vienen después de que usted mantenga el código. -
Llamar
newInstance()
enonCreate()
, 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 obtener pantalla en negro mientras se desplaza en ListView en Android
- Iniciar Androids WiFi-Manager mediante el envío de una intención?