2016-08-18 4 views
1

Ich erhalte einen Fehler bei einem bestimmten Fragment (das ist eines von dreien bei einer Aktivität mit Registerkarten). Der Fehler lautet:Ich bin mir nicht sicher, wie die Fehlermeldung "Kann Konstruktor nicht auflösen" behoben werden kann.

Ich versuche, Feld auf einem Fragment einer Aktivität mit Registerkarten einzubeziehen und zu vervollständigen. Die Java-Klasse handelt es sich unter:

package layout; 
import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ArrayAdapter; 
import android.widget.AutoCompleteTextView; 
import com.example.alibasmaci.maral.R; 

/** 
* A simple {@link Fragment} subclass. 
*/ 
public class OneWayFragment extends Fragment { 


    public OneWayFragment() { 
     // Required empty public constructor 
    } 
    public static OneWayFragment newInstance() { 
     OneWayFragment fragment = new OneWayFragment(); 
     return fragment; 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 


     View rootView = inflater.inflate(R.layout.fragment_one_way, container, false); 

     String[] cities = 

       {"Ottawa - Carp CYRP", 
       "Toronto - Billy Bishop CYYZ", 
       "Montreal - St. Hubert CYHU" 
       }; 

     AutoCompleteTextView actvDeparture; 
     actvDeparture = (AutoCompleteTextView) rootView.findViewById(R.id.actvDeparture); 
     ArrayAdapter adapter = new ArrayAdapter(this,android.R.layout.select_dialog_item,cities); 
     actvDeparture.setThreshold(1); 

     return rootView; 
    } 

} 

Der Fehler Ich beziehe mich auf ein Ergebnis dieser Linie:

ArrayAdapter adapter = new ArrayAdapter(this,android.R.layout.select_dialog_item,cities); 

Irgendwelche Gedanken darüber, wie dieses Problem beheben?

Dank

Antwort

0

nimmt ArrayAdapter Konstruktor die Context als ersten Parameter, und Sie vorbei this von Fragment, was im Wesentlichen bedeutet, dass Sie eine Fragment in dieser Zeile vorbei sind:

ArrayAdapter adapter = new ArrayAdapter(this,android.R.layout.select_dialog_item,cities); 

Was Sie sollte tun, ist pass die Aktivität, dass es wie folgt verbunden ist:

ArrayAdapter adapter = new ArrayAdapter(getActivity(),android.R.layout.select_dialog_item,cities); 

Ein noch besserer Weg, es zu tun ist es, als ein Feld zu deklarieren und initialisieren es in onAttach Verfahren wie:

ArrayAdapter adapter; 

@Override 
public void onAttach(Context context) { 
    adapter = new ArrayAdapter(context,android.R.layout.select_dialog_item,cities); 
} 

EDIT: Sie fehlt auch diese Zeile:

actvDeparture.setAdapter(adapter); 
+0

Ich bemerkte, dass ich fehlte actvDeparture.setAdapter (Adapter); Also habe ich den Code in der Frage bearbeitet –

+0

Nun, ich weiß nicht, was es dann sein könnte. Vielleicht sollten Sie Ihren eigenen Adapter erstellen, der 'ArrayAdapter ' oder etwas ähnliches erweitert. Da meine Post Ihnen geholfen hat, das Problem zu lösen, sollten Sie in Erwägung ziehen, die Antwort zu akzeptieren, um die Frage zu beenden. – Vucko

0

ArrayAdapter akzeptiert Kontext für den ersten Parameter und Sie können den Kontext übergeben, indem Sie getActivity() aufrufen.

ArrayAdapter adapter = new ArrayAdapter(getActivity(),android.R.layout.select_dialog_item,cities); 
0

Der Fehler ist, dass es keine solchen Konstruktor ist wie:

ArrayAdapter(Fragment, int, T[]) 

Ändern der Referenz this für getActivity() so können Sie den Kontext propely zu bekommen,

nach, dass es den Konstruktor wird übereinstimmen

ArrayAdapter(Context context, int resource, T[] objects) 
0

ArrayAdapter ist eine generische Klasse. Sie haben das Argument für den generischen Typ nicht angegeben. Sie verwenden es also rohe, also schlecht. Es sollte ArrayAdapter<String> sein.

Es verfügt über 6 Konstrukteuren:

ArrayAdapter(Context context, int resource) 
ArrayAdapter(Context context, int resource, int textViewResourceId) 
ArrayAdapter(Context context, int resource, T[] objects) 
ArrayAdapter(Context context, int resource, int textViewResourceId, T[] objects) 
ArrayAdapter(Context context, int resource, List<T> objects) 
ArrayAdapter(Context context, int resource, int textViewResourceId, List<T> objects) 

Sie Methodenaufruf hat diese Signatur:

ArrayAdapter(layout.OneWayFragmen,int,java.lang.string[]) 

Das könnte die 3. Konstruktor passen, aber nur, wenn layout.OneWayFragmen ist ein Context. Ist es?

Verwandte Themen