不确定如何解决“无法解析构造函数”错误

时间:2016-08-18 18:24:29

标签: java android android-studio

我在特定片段上遇到错误(这是标签式活动中的三个之一)。错误是:

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

我正在尝试在选项卡式活动的一个片段中包含和自动填充字段。有问题的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);

有关如何解决这个问题的想法吗?

由于

4 个答案:

答案 0 :(得分:0)

ArrayAdapter的构造函数将Context作为第一个参数,并且您从this传递Fragment,这实际上意味着您通过了这一行Fragment

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

您应该做的是将其附加的活动传递给:

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

更好的方法是将其声明为字段并在onAttach方法中初始化,如:

ArrayAdapter adapter;

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

编辑:您还错过了这一行:

actvDeparture.setAdapter(adapter);

答案 1 :(得分:0)

ArrayAdapter接受第一个参数的Context,你可以通过调用getActivity()来传递上下文。

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

答案 2 :(得分:0)

错误是没有像这样的构造函数:

 ArrayAdapter(Fragment, int, T[])

更改this的引用getActivity(),以便您可以正确获取上下文,

之后它将匹配构造函数

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

答案 3 :(得分:0)

ArrayAdapter通用类。您尚未指定泛型类型参数,因此您正在使用 raw ,这是错误。它应该是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)

你方法调用有这个签名:

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

可能适合第3个构造函数,但前提是layout.OneWayFragmenContext。是吗?