2017-01-14 19 views
0

Meine App funktioniert perfekt beim Laden aller Ereignisse und Aktivitäten. Wenn ich jedoch versuche, eine Activity mit RecyclerView zu laden, um einige gespeicherte Strings anzuzeigen. Es stürzt ab und finish. Ich weiß nicht, ob die Syntax falsch ist oder vielleicht die Logik des Codes selbst.App stürzt auf RecyclerView

Ich rufe die Aktivität von einem Zuhörer

Objekt parceable auf die neue Tätigkeit:

final public FrasesProvisional frases = new FrasesProvisional();

Methode Start der Aktivität:

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
     case R.id.config: 
      lanzarConfiguracion(null); 
      break; 

     case R.id.about: 
      lanzarAbout(null); 
      break; 
     case R.id.mismotivaciones: 
      abrirMotivaciones(null); 
      break; 
    } 
    return true; 
} 

private void abrirMotivaciones(View view) { 
    Intent i = new Intent(this, MotivacionesUser.class); 
    startActivity(i); 
} 

Aktivität Inhalt:

import android.os.Bundle; 
    import android.os.PersistableBundle; 
    import android.support.v7.app.AppCompatActivity; 
    import android.support.v7.widget.LinearLayoutManager; 
    import android.support.v7.widget.RecyclerView; 

    /** 
    * Created by Pablo on 14/01/2017. 
    */ 
    public class MotivacionesUser extends AppCompatActivity { 
     private RecyclerView mRecyclerView; 
     private RecyclerView.Adapter mAdapter; 
     private RecyclerView.LayoutManager mLayoutMmanager; 

     @Override 
     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.motivacionesrecycler); 

      FrasesProvisional frases = getIntent().getParcelableExtra("frases"); 

      mRecyclerView = (RecyclerView) findViewById(R.id.motivaciones_recycler); 
      // use this setting to improve performance if you know that changes 
      // in content do not change the layout size of the RecyclerView 
      mRecyclerView.setHasFixedSize(true); 
      //Init LayoutManager 

      mLayoutMmanager = new LinearLayoutManager(this); //Podemos elegir entre LinearM, GridM o ScrappableM en relación al estilo que queramos 
      mRecyclerView.setLayoutManager(mLayoutMmanager); //Set the Layout to the RrecyclerView 

      mAdapter = new RecyclerAdaptador(frases.getArrayList()); //Especificamos el adaptador a usar y lo agenciamos al Recycler 
      mRecyclerView.setAdapter(mAdapter); 
     } 
    } 

RecyclerView Code:

import android.support.v7.widget.RecyclerView; 
    import android.view.LayoutInflater; 
    import android.view.View; 
    import android.view.ViewGroup; 
    import android.widget.TextView; 
    import java.util.ArrayList; 

    /** 
    * Created by Pablo on 14/01/2017. 
    */ 
    public class RecyclerAdaptador extends RecyclerView.Adapter <RecyclerAdaptador.ViewHolder> { 

     private ArrayList <String> frases; 

     public static class ViewHolder extends RecyclerView.ViewHolder { 
      // each data item is just a string in this case 
      public TextView mTextView; 
      public ViewHolder(View v) { 
       super(v); //Inicializa el textview 
       mTextView = (TextView) v.findViewById(R.id.text_recycler); 
      } 
     } 

     public RecyclerAdaptador(ArrayList <String> frases) { 
      this.frases = frases; 
     } 

     @Override 
     public RecyclerAdaptador.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
      //Create a new view 
      View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.frase_recycler, parent, false); 
     ViewHolder vh = new ViewHolder(view); 

      return vh; 
     } 


     @Override 
     public void onBindViewHolder(ViewHolder holder, int position) { 

      //Get element of the data set at the position x and replace the content of the rextView with it 

      holder.mTextView.setText(frases.get(position)); 

     } 

     @Override 
     public int getItemCount() { 
      return frases.size(); 
     } 
    } 

Vielen Dank im Voraus!

+2

Bitte geben Sie die Unfallprotokolle an. –

Antwort

-1

eine Klassenvariable hinzufügen

Context context; 


public RecyclerAdaptador(Context context,ArrayList<String> frases) { 
this.context=context 
    this.frases = frases; 
} 

von Aktivität

mAdapter = new RecyclerAdaptador(this,frases.getArrayList()); 
+0

Kann ich den Grund wissen, warum diese Antwort abgelehnt wird? –

+0

Da das Problem durch die Verwendung eines fehlenden oder ungültigen Kontexts verursacht wird (und nichts in der Klasse "RecyclerAdaptador" verwendet es), hat diese Antwort nichts mit dem Problem zu tun. – Kiskae

+0

Danke, aber das Problem war mit dem Parcable-Objekt, wenn writeParceable aufgerufen wurde. –

0

auf den Code der Suche, erstellen Sie die Aktivität durch den folgenden Ausschnitt:

Intent i = new Intent(this, MotivacionesUser.class); 
startActivity(i); 

jedoch in der Aktivität, die Sie versuchen Sie, zusätzliche Daten in FrasesProvisional frases = getIntent().getParcelableExtra("frases"); auszulesen.

Da Sie diese Daten nie an die Absicht angehängt haben, die null zurückgeben würde. Sie verwenden es dann, ohne zu überprüfen, ob es bei new RecyclerAdaptador(frases.getArrayList()); null war, verursacht eine NullPointerException und stürzt Ihre Klasse ab.

+0

Das Problem war eine schlechte Parcable-Objekt-Erstellung. Aber danke für den Tipp. –

Verwandte Themen