解决QuranArabicUtils.getTajweed()与ListView适配器参数不匹配错误
解决参数不匹配问题的方案
错误原因很直接:QuranArabicUtils.getTajweed()的第一个参数要求是Context类型,但你在适配器里传的this是MainActivity.Listview1Adapter的实例,并非Context,导致类型不匹配。下面是几种可行的解决方式:
方式一:给适配器传入Context(推荐)
- 给适配器添加Context成员变量,通过构造方法传入:
public class Listview1Adapter extends BaseAdapter { private Context mContext; private List<...> aYat; // 替换成你实际的数据类型 // 构造方法 public Listview1Adapter(Context context, List<...> aYat) { this.mContext = context; this.aYat = aYat; } // 重写的其他方法(getCount、getItem等)... @Override public View getView(final int _position, View _v, ViewGroup _container) { LayoutInflater _inflater = getLayoutInflater(); View _view = _v; if (_view == null) { _view = _inflater.inflate(R.layout.tet, null); } final LinearLayout linear1 = _view.findViewById(R.id.linear1); final TextView textview1 = _view.findViewById(R.id.textview1); // 使用传入的Context调用方法 textview1.setText(QuranArabicUtils.getTajweed(mContext, aYat.get((int)_position).get("a").toString())); return _view; } }
- 在MainActivity中创建适配器时,传入Activity的Context:
Listview1Adapter adapter = new Listview1Adapter(this, aYat); yourListView.setAdapter(adapter);
方式二:如果适配器是Activity内部类,直接用外部类的Context
如果Listview1Adapter是MainActivity的内部类,可以直接用MainActivity.this代替this,这个引用指向的是Activity实例(属于Context类型):
textview1.setText(QuranArabicUtils.getTajweed(MainActivity.this, aYat.get((int)_position).get("a").toString()));
方式三:从ViewGroup参数获取Context
可以通过getView方法的_container参数获取Context:
textview1.setText(QuranArabicUtils.getTajweed(_container.getContext(), aYat.get((int)_position).get("a").toString()));
注意:这种方式要确保_container不为null,虽然在正常的ListView流程中它不会为空,但前两种方式更稳妥。
内容的提问来源于stack exchange,提问作者Fiqih Hasroni
相关产品推荐
相关产品推荐

