我坚持创建自定义适配器。我想在ListView内的按钮上设置setOnClickListener,我发现这个主题看起来没问题how-to-setonclicklistener-on-the-button-inside-the-listview,但问题是我在getLayoutInflater行上遇到无法访问的代码错误。
这是我的代码
public class MyCursorAdapter extends SimpleCursorAdapter{
private final Context ctx;
private Button tagButton = null;
public MyCursorAdapter(Context context, int layout, Cursor c,
String[] from, int[] to) {
super(context, layout, c, from, to);
ctx = context;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
return super.getView(position, convertView, parent);
LayoutInflater li = (LayoutInflater) ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View rowView = li.inflate(R.layout.tags_list_element, null, true);
tagButton= (Button)rowView.findViewById(R.id.tag_title);
tagButton.setTag(position);
tagButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
}
});
return rowView;
}
}
这两种方法对我都不起作用
LayoutInflater inflater = context.getLayoutInflater();
和
LayoutInflater li = (LayoutInflater) ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
答案 0 :(得分:14)
尝试:
View myView = LayoutInflater.from(ctx).inflate(R.layout.my_view, null);
此外,你得到什么例外?
编辑:在你的“getView”方法中,第一行是“return .....”,所以你的方法的其余部分将永远不会被执行,我认为......;)
答案 1 :(得分:2)
从表现的角度来看:
View myView = LayoutInflater.from(context).inflate(R.layout.my_view, parent, false);
是对的;但是将inflater存储在适配器内的最终区域会更有效。
private final Context ctx;
private final LayoutInflater mInflater;
private Button tagButton = null;
public MyCursorAdapter(Context context, int layout, Cursor c,
String[] from, int[] to) {
super(context, layout, c, from, to);
ctx = context;
mInflater = LayoutInflater.from(ctx);
}
然后执行getView操作。
//....
final View v = mInflater.inflate(R.layout.list_item, parent, false);
//....
//stuff here
//
return v;
还要确保Context是您的活动上下文,如果使用错误的上下文,您将收到Theming问题。
此致 克里斯