Android:BaseAdapter和getLayoutInflater在单独的类文件中

Hit*_*kun 21 android android-gridview baseadapter

现在填充我的GridViews我在每个Android活动(大多数是其中)上使用扩展的BaseAdapter类.

为了便于阅读和维护,我试图将所有BaseAdapter代码放在一个单独的类文件中.

要填充GridView,我正在使用LayoutInflater,这里的东西变得棘手......

由于getLayoutInflater()来自android.Activity,它只是不会做的伎俩.我尝试将我的Adapter.java(填充GridViews的类)扩展为Activity类,然后在内部创建BaseAdapter类(我现在这样做的方式),但我无法使其正常工作.

以下是Adapter.java的外观:

//Adapter.java
package com.cimp.matitec;

import greendroid.app.GDActivity;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

public class Adapter extends GDActivity{

public class ImageAdapter extends BaseAdapter
{
   Context MyContext;
   int count;
   String[] nombre;

   public ImageAdapter(Context _MyContext, int n, String[] nombre)
   {
      MyContext = _MyContext;
      count = n;
      this.nombre = nombre;
   }

   public int getCount()
   {
                     /* Set the number of element we want on the grid */
      return count;
   }

   @Override
   public View getView(int position, View convertView, ViewGroup parent)
   {
      View MyView = convertView;

      if ( convertView == null )
      {
         /*we define the view that will display on the grid*/

         //Inflate the layout
         LayoutInflater li = getLayoutInflater();
         MyView = li.inflate(R.layout.grid_item, null);

         // Add The Text!!!
         TextView tv = (TextView)MyView.findViewById(R.id.grid_item_text);
         tv.setText(nombre[position]+"");

         // Add The Image!!!           
         ImageView iv = (ImageView)MyView.findViewById(R.id.grid_item_image);
         iv.setImageResource(R.drawable.ic_launcher);
      }

      return MyView;
   }

   @Override
   public Object getItem(int arg0) {
      // TODO Auto-generated method stub
      return null;
   }

   @Override
   public long getItemId(int arg0) {
      // TODO Auto-generated method stub
      return 0;
   }
}
}
Run Code Online (Sandbox Code Playgroud)

要从外部调用它,我执行以下操作:

//MainClass.java
Adapter MyGridAdapter = new Adapter();
MyGrid = (GridView)findViewById(R.id.grid);
MyGrid.setAdapter(MyGridAdapter.new ImageAdapter(this, 6, nombreTema));
Run Code Online (Sandbox Code Playgroud)

该应用程序运行,但在尝试填充时,我得到一个NullPointerException getLayoutInflater().

有人知道我错过了什么,或者如何让它正常工作?

MH.*_*MH. 59

获取LayoutInflater对象的方法多于直接来自Activity.事实上,getLayoutInflater()可能只是一种方便的方法:

LayoutInflater li = (LayoutInflater) myContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
Run Code Online (Sandbox Code Playgroud)

请参阅文档LayoutInflater.


小智 6

在创建扩展 baseadapter 的类的对象时,您应该传递 MainActivity 的上下文,如下所示 LayoutInflater inflater = ((Activity)MyContext)).getLayoutInflater;

这会将 MyContext 转换为 Activity,然后可以调用 GetLayoutInflater()!