【问题标题】:Arrayadapter cannot resolve constructor: no suitable constructor found, actual and formal arguments differ in lengthArrayadapter 无法解析构造函数:找不到合适的构造函数,实际参数和形式参数的长度不同
【发布时间】:2016-04-30 18:16:12
【问题描述】:

我到处搜索,但找不到解决问题的方法。我是 java 新手,我正在尝试构建一个应用程序,但由于某种原因,我无法解决这个问题。我收到此错误:

错误:(68, 33) 错误: 没有找到合适的构造函数 ArrayAdapter(OneFragment,int,String[]) 构造函数 ArrayAdapter.ArrayAdapter(Context,int,int,List) 不是 适用(实际参数列表和形式参数列表的长度不同) 构造函数 ArrayAdapter.ArrayAdapter(Context,int,List) 不是 适用(实际参数 OneFragment 无法转换为 Context 通过方法调用转换)构造函数 ArrayAdapter.ArrayAdapter(Context,int,int,String[]) 不适用 (实际参数列表和形式参数列表的长度不同)构造函数 ArrayAdapter.ArrayAdapter(Context,int,String[]) 不适用 (实参OneFragment无法通过方法转换为Context 调用转换)构造函数 ArrayAdapter.ArrayAdapter(Context,int,int) 不适用(实际 参数 OneFragment 无法通过方法转换为 Context 调用转换)构造函数 ArrayAdapter.ArrayAdapter(Context,int) 不适用(实际和 形式参数列表的长度不同)

代码(OneFragment.java):

package memo.javahelps.com.hanzesoep;

import android.content.Intent;
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.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;

public class OneFragment extends Fragment{

    ListView list;
    String[] itemname = {
            "Kippensoep",
            "Tomatensoep",
            "Thaise Kippensoep"
    };

    Integer[] imgid = {
            R.mipmap.kippensoep,
            R.drawable.tomatensoep,
            R.drawable.thaisekip,
    };

    public OneFragment() {
        // Required empty public constructor
    }


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

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

        CustomListAdapter adapter = new CustomListAdapter(getActivity(), itemname, imgid);

        list=(ListView) rootView.findViewById(R.id.list);
        list.setAdapter(adapter);


        return rootView;



        /* op item klikken */


        ArrayAdapter adapter2 = new ArrayAdapter<String>(OneFragment.this,
                R.layout.list_item, itemname);

        list.setAdapter(adapter2);

        list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                                    int position, long id) {
                switch (position) {
                    case 0:
                        Intent newActivity = new Intent(OneFragment.this.getActivity(), Kippensoep.class);
                        startActivity(newActivity);
                        break;


                }

            }
        });

}


    }

我正在尝试使用 arrayadapter 在可单击的列表视图中获取单独的项目。谁能帮我?我做错了什么?

【问题讨论】:

  • 发布 CustomListAdapter 代码
  • 对于ArrayAdapter 构造函数中的第一个参数,您需要一个Context。像使用 CustomListAdapter 一样使用 getActivity()

标签: java android constructor android-arrayadapter


【解决方案1】:

与您的构造函数调用最相似的ArrayAdapter 构造函数是ArrayAdapter.ArrayAdapter(Context,int,String[]),但它不适用,因为actual argument OneFragment cannot be converted to Context by method invocation conversion

这里

    ArrayAdapter adapter2 = new ArrayAdapter<String>(OneFragment.this,
            R.layout.list_item, itemname);

您正在将 Fragment 实例传递给需要 ContextArrayAdapter。你应该传递封闭的Activity

    ArrayAdapter adapter2 = new ArrayAdapter<String>(getActivity(),
            R.layout.list_item, itemname);

此外,return rootView; 应该是您的 onCreateView 方法中的最后一个语句。否则后面的代码将无法访问。

【讨论】:

  • 感谢您的回复。我也试过了,还是不行?它给出了错误“无法访问的语句”和“缺少返回语句”
  • @EsmeraldavanDaalen 您的代码还有其他问题。您有跟在return rootView; 语句之后的语句,因此它们无法访问。
猜你喜欢
  • 2015-07-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-13
  • 2013-02-15
  • 2015-05-05
  • 1970-01-01
相关资源
最近更新 更多