我正在使用ListView的自定义适配器(BaseAdapter)来显示程序中的对象列表。我已根据我在网上找到的教程(http://www.codelearn.org/android-tutorial/android-listview)实现了所有内容,但是在尝试在Adapter类的getView()方法中设置LayoutInflater时出现错误。
public View getView(int arg0, View arg1, ViewGroup arg2) {
if(arg1==null) {
LayoutInflater inflater =(LayoutInflater)EventListActivity.this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
arg1 = inflater.inflate(R.layout.eventitem, arg2, false);
}
WhereListListActivity是我的“MainActivity”,我在哪里:
public class EventListActivity extends Activity {
private ListView listview;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.event_list);
//setting adapter to event list view
EventBaseAdapter eventadapter = new EventBaseAdapter();
listview = (ListView)findViewById(R.id.eventlist);
listview.setAdapter(eventadapter);
}
我在Adapter类的行中遇到错误,我正在创建LayoutInflater,在“EventListActivity.this”部分,说“没有封闭的EventListActivity类型的实例可以在范围内访问”。我不知道这可能意味着什么,我很乐意接受你们的任何建议或帮助。
提前致谢!
答案 0 :(得分:1)
创建一个像这样的构造函数 -
public CustomListAdapter(Activity activity, List<Movie> movieItems) {
this.activity = activity;
...
}
并且,使用 -
inflater = ( LayoutInflater )activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
这是因为您的Adapter文件没有任何活动参考;因此,它无法获取布局inflater服务。我们将Activity的实例传递给它的构造函数,并在CustomListAdapter中使用它。
答案 1 :(得分:0)
创建LayoutInflater全局对象,以便您可以在其他自定义适配器中使用它,并在getView()方法上使用用户Inflater.inflat方法。
喜欢这个
public class EventListActivity extends Activity {
private ListView listview;
LayoutInflater inflater;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.event_list);
//init inflater
inflater =(LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
//setting adapter to event list view
EventBaseAdapter eventadapter = new EventBaseAdapter();
listview = (ListView)findViewById(R.id.eventlist);
listview.setAdapter(eventadapter);
}
并在您的代码中使用它..
public View getView(int arg0, View arg1, ViewGroup arg2) {
if(arg1==null) {
arg1 = inflater.inflate(R.layout.eventitem, arg2, false);
}