BaseAdapter中的ListView Inflater getView()方法

时间:2014-12-25 17:23:43

标签: android listview android-listview baseadapter

我正在使用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类型的实例可以在范围内访问”。我不知道这可能意味着什么,我很乐意接受你们的任何建议或帮助。

提前致谢!

2 个答案:

答案 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);
}