2016-08-30 1 views
0

Ich lerne Android durch die Änderung von Beispielen. Ich arbeite derzeit an this Beispiel. Was in meinem Code anders ist, ist, dass ich das listView in einem Fragment anzeigen möchte.Hinzufügen einer Liste zu Fragment in Android

-Code (Fehler in den Kommentaren angezeigt):

public class MovieListFragment extends Fragment { 

private static final String TAG = MovieListFragment.class.getSimpleName(); 

private static final String url = "http://example/json/movies.json"; 
private ProgressDialog pDialog; 
private List<Movie> movieList = new ArrayList<Movie>(); 
private ListView listView; 
private CustomListAdapter adapter; 

@Override 
public View onCreateView(LayoutInflater inflater, 
         ViewGroup container, 
         Bundle savedInstanceState) { 
    return inflater.inflate(R.layout.fragment_movies, container, false); 

    listView = (ListView) findViewById(R.id.list); 
    //cannot resolve method findViewById(?) and cannot resolve symbol list 
    adapter = new CustomListAdapter(this, movieList); 
    listView.setAdapter(adapter); 

    pDialog = new ProgressDialog(this); 

    pDialog.setMessage("Loading..."); 
    pDialog.show(); 

    getActionBar().setBackgroundDrawable(new ColorDrawable(Color.parseColor("#1b1b1b"))); 
    //cannot resolve getActionBar 

...

@Override 
//method does not override method from its superclass 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.main, menu); 
    //cannot resolve method getMenuInflater() and cannot resolve symbol menu 
    return true; 
} 

Hier habe ich die folgenden Fehler:

  1. auflösen kann nicht Methode findViewById (?)
  2. kann nicht Symbol Liste lösen
  3. getActionBar nicht lösen können
  4. Methode
  5. lösen Methode nicht Methode von ihrer Oberklasse außer Kraft setzen kann nicht getMenuInflater()
  6. können Symbol nicht auflösen Menü
  7. customlistadapter (android.app.activity Liste) in customlistadapter kann nicht auf (android.content.context) angewendet werden
  8. in pDialog = new ProgressDialog (this); ProgressDialog (android.app.activity Liste) in ProgressDialogcannot bis (com.kemo.editedtutorial.sliderfragments.MoviesListFragment) angewendet werden
+0

hast du das Projekt heruntergeladen ..? –

+0

@Saravana Kumar Chinnaraj Nein, ich tippte und änderte es. – Kemo

+2

sein ravi altes Tutorial. Ich empfehle, einige aktualisierte zu folgen .. auch Sie haben ein Problem mit Ihrer Fragment-Implementierung bitte überprüfen Sie es richtig .. –

Antwort

3

Zum einen von Ihrem oncreateview() Sie die Ansicht zurückkehren so, verwenden Sie stattdessen

View view=inflater.inflate(R.layout.fragment_movies, container, false); 

dann diese Ansicht verwenden, um die Verwendung von Layout-Elementen als view.findViewById() statt findViewById() und dann schließlich in die machen Ende Rückkehr dieses view

über Fehler nicht auflösen kann Symbol Liste
Stellen Sie sicher, dass Sie eine Listenansicht in Ihrem Layout fragment_movies definiert haben, die ID als android:id="@+id/list"

Die getActionBar Sache hat man in der Tätigkeit tun, die dieses Fragment hat. Wenn Sie Support-Bibliothek verwenden, dann können Sie die ActionBar ziehbar als

ändern
((YourParentActivity which has this fragment)(getActivity())).getSupportActionBar().setBackgroundDrawable(new ColorDrawable(Color.parseColor("#1b1b1b"))); 
e.g ((MainActivity)(getActivity())).getSupportActionBar().setBackgroundDrawable(new ColorDrawable(Color.parseColor("#1b1b1b"))); 

Sie können wie folgt tun Inspektion Fehler um den getsupportActionbar zu vermeiden:

ActionBar actionBar = ((MainActivity)getActivity()).getSupportActionBar(); 
     if(actionBar!=null) { 
      actionBar.setBackgroundDrawable(new ColorDrawable(Color.parseColor("#1b1b1b"))); 
     } 

Wenn Sie Option Menüs verwenden, um von das Fragment, dann in Ihrem onCreate() Fragment, fügen Sie setHasOptionMenu(true) Zeile hinzu. Dadurch wird auf das Optionsmenü Ihrer Aktivität zugegriffen.
dann das Optionsmenü verwenden Sie

@Override 
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 
     super.onCreateOptionsMenu(menu, inflater); 
    } 

Das Menü wird von Ihrem Android-Aktivität zu schreiben, verwenden Sie dieses Menü Ihre Operation auszuführen. Um Optionsmenü erhalten ausgewählte

@Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     return super.onOptionsItemSelected(item); 
    } 

Über den Fehler: customlistadapter (android.app.activity Liste) in customlistadapter nicht (android.content.context) in pDialog = new ProgressDialog angewendet werden kann (diese) ; ProgressDialog (android.app.activity Liste) in ProgressDialogcannot bis (com.kemo.editedtutorial.sliderfragments.MoviesListFragment) angewendet werden

Statt vorbei dieses Pass getActivity() da beide von ihnen sind context als Argument-Wert erwartet, das ist der Aktivität, aber Sie übergeben es als von Fragment. so können Sie entweder getActivity() oder getActivity().getApplicationContext() passieren diesen Fehler Hoffnung zu lösen diese Ihnen helfen

+0

Diese Überprüfung analysiert die Methodensteuerung und den Datenfluss, um mögliche Zustände zu melden, die immer wahr oder falsch sind, Ausdrücke, deren Wert sich statisch als konstant erweist, und Situationen, die zu Verstößen gegen den Nullabwicklungsvertrag führen können. Variablen, Methodenparameter und Rückgabewerte, die als Nullable oder NotNull markiert sind, werden als Nullable (bzw. Nicht-Null) behandelt und während der Analyse zur Überprüfung von Nullabwicklungskontrakten verwendet, z. Melden Sie mögliche NullPointerException-Fehler. – Kemo

+0

Komplexere Verträge können mit Vertragskommentar definiert werden, zum Beispiel: Vertrag ("_, null -> null") - Methode gibt null zurück, wenn das zweite Argument null ist Contract ("_, null -> null; _,! Null ->! null ") - Methode gibt null zurück, wenn das zweite Argument null und nicht-null ist sonst Contract (" true -> fail ") - eine typische assertFalse-Methode, die eine Exception auslöst, wenn true an sie übergeben wird. Die Prüfung kann konfiguriert, um benutzerdefinierte Nullable NotNull Annotationen zu verwenden (standardmäßig werden die aus annotations.jar verwendet) – Kemo

+0

das ist, was ich bekam, als ich '((MainActivity) (getActivity())). getSupportActionBar(). setBackgroundDrawable (neue ColorDrawable (Color.parseColor ("# 1b1b1b"))); ' – Kemo

1

Ansicht Ansicht = inflater.inflate (R.layout.fragment_movies, Behälter, false);

Verwendung:

(Listview) view.findViewById (R.id.list); etc

+0

Ich habe dies: 'public View onCreateView (Layout Inflatter interater, ViewGroup Container, Bundle savedInstanceState) { Ansicht anzeigen = inflater .inflate (R.layout.fragment_playdates, container, false); listView = (ListView) view.findViewById (R.id.list); 'aber immer noch die gleichen Probleme. – Kemo

1

das Problem ist, dass Sie Befehl inflater.inflate(R.layout.fragment_movies, container, false), Rückergebnis sofort ausführen und dann entsprechende Ansichten zu finden versuchen.

Ansicht, das Ergebnis des Aufblasens, enthält alle seine untergeordneten Elemente, daher muss dieselbe Ansicht verwendet werden, um sie später zu finden. Anstatt nur findViewById sollten Sie

View view = inflater.inflate(R.layout.fragment_movies, container, false); 
listview = (ListView) view.findViewById(R.id.list); 

return view; 
2

Versuchen Sie, diese

@Override 
public View onCreateView(LayoutInflater inflater, 
         ViewGroup container, 
         Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.fragment_movies, container, false); 

    listView = (ListView) view .findViewById(R.id.list); 
    //cannot resolve method findViewById(?) and cannot resolve symbol list 
    adapter = new CustomListAdapter(this, movieList); 
    listView.setAdapter(adapter); 

    pDialog = new ProgressDialog(this); 

    pDialog.setMessage("Loading..."); 
    pDialog.show(); 

    getActivity().getActionBar().setBackgroundDrawable(new ColorDrawable(Color.parseColor("#1b1b1b"))); 
    //cannot resolve getActionBar 
return view; 
} 

@Override 
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 
    inflater.inflate(R.menu.menu_sample, menu); 
    super.onCreateOptionsMenu(menu,inflater); 
} 
4

1. Methode nicht lösen können findViewById (?)

Sie haben diesen Code geschrieben in onCreateView() nach return Aussage.

Erste Inflate Ihre view, tun notwendigen Operationen auf das und dann zurück, dass view

auch view.findViewById()

2. verwenden, können nicht Symbolliste
3. kann nicht lösen Symbolmenü

lösen

Hier wurde Ihr R.java aufgrund einiger Nebel nicht generiert akes in drawable oder Ihre layout.

4.kann nicht getActionBar

Sie sind in Fragment und getActionBar ist Methode lösen Activity so müssen Sie getActivity(). getActionBar()

5. nicht lösen Methode getMenuInflater()
6 bis call`. Methode überschreibt nicht Methode von ihrer Oberklasse

Sie sind in Fragment und getMenuInflater() ist Methode von Activity so müssen Sieanrufen

@Override 
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 
    super.onCreateOptionsMenu(menu, inflater); 

    getActivity().getMenuInflater().... 
} 
1

Sie sollten, weil Rückkehr Methode am Ende des onCreateView() -Methode aufrufen, wenn Sie Rückkehr Methode bei der unter der onCreateView() aufrufen, dann wird die Klasse anzeigen kann nicht jede id .So zu finden, können Sie verwenden wie folgt: -

@Override 
public View onCreateView(LayoutInflater inflater, 
         ViewGroup container, 
         Bundle savedInstanceState) { 
    View v = inflater.inflate(R.layout.fragment_movies, container, false); 

    listView = (ListView) findViewById(R.id.list); 
    //cannot resolve method findViewById(?) and cannot resolve symbol list 
    adapter = new CustomListAdapter(this, movieList); 
    listView.setAdapter(adapter); 

    pDialog = new ProgressDialog(this); 

    pDialog.setMessage("Loading..."); 
    pDialog.show(); 

    getActionBar().setBackgroundDrawable(new ColorDrawable(Color.parseColor("#1b1b1b"))); 

return v; 
} 
+0

Ich bekomme immer noch den gleichen Fehler. – Kemo

+1

Bitte versuchen Sie es v = inflater.inflate (R.layout.agenda, null); das Layout aufblasen. –

Verwandte Themen