2016-08-18 26 views
1

特定のフラグメント(タブ付きアクティビティの3つのうちの1つ)でエラーが発生します。エラーは次のとおりです。"コンストラクタを解決できません"というエラーを解決する方法がわからない

Cannot resolve constructor 'ArrayAdapter(layout.OneWayFragmen,int,java.lang.string[])' 

タブ付きアクティビティの1つのフラグメントにフィールドを組み込み、オートコンプリートしようとしています。問題のJavaクラスは以下の通りです:

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; 
    } 

} 

私が参照していますエラーがこの行の結果である。この問題を解決する方法について

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

任意の考え?

おかげ

答えて

0

ArrayAdapterのコンストラクタは、最初のパラメータとしてContextを取り、そしてあなたは、本質的に、あなたがこの行のFragment渡している意味Fragment、からthisを渡している:

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

を何それに添付されているアクティビティを渡す必要があります:

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

ArrayAdapter adapter; 

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

EDIT::また、この行が欠落している:

actvDeparture.setAdapter(adapter); 
+0

私が見つからなかったことに気づいた actvDeparture.setAdapter(adapter);だから私は質問のコードを編集した –

+0

さて、私はそれが何であるか分からない。おそらく、 'ArrayAdapter 'またはそれに類するものを展開する独自のアダプタを作成するべきでしょう。私の郵便はあなたが問題を解決するのを助けたので、質問を閉じるために答えを受け入れることを検討するべきです。 – Vucko

0

ArrayAdapterが受け入れるそれを行うためのより良い方法は、フィールドとして宣言などonAttach方法でそれを初期化することです最初のパラメータのコンテキストで、getActivity()を呼び出してコンテキストを渡すことができます。

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

エラーはそのようなコンストラクタのような存在しないことである。

ArrayAdapter(Fragment, int, T[]) 

変更ので、あなたがpropelyコンテキストを取得することができますgetActivity()のために参照this、それはコンストラクタと一致することを後

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

ArrayAdapterは、汎用クラスです。ジェネリック型引数を指定していないので、のが悪いです。それはArrayAdapter<String>でなければなりません。

それは6つのコンストラクタあります

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) 

あなたのメソッド呼び出しは、この署名を持っていた:第三コンストラクタに合うかもしれませんが、場合にのみlayout.OneWayFragmenContextされていることを

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

。それは...ですか?

関連する問題