Ngay bây giờ để điền GridViews của tôi, tôi đang sử dụng lớp BaseAdapter mở rộng trên mỗi Hoạt động Android của tôi (hầu hết trong số đó).Android: BaseAdapter và getLayoutInflater trên tệp lớp riêng biệt
Để dễ đọc và bảo trì hơn, tôi đang cố gắng đặt tất cả mã BaseAdapter vào một tệp lớp riêng biệt.
Để cư GridView, Tôi đang sử dụng LayoutInflater, và đây là nơi thứ trở nên khó khăn ...
Kể từ khi getLayoutInflater() xuất phát từ android.Activity
, nó chỉ sẽ không làm các trick. Tôi đã thử làm cho Adapter.java của tôi (lớp để điền vào GridViews) một lớp Activity mở rộng, và sau đó bên trong tạo lớp BaseAdapter (cách tôi làm nó ngay bây giờ), nhưng tôi đã không thể làm cho nó hoạt động đúng.
Sau đây là cách Adapter.java trông:
//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;
}
}
}
Để gọi nó từ bên ngoài, tôi làm như sau:
//MainClass.java
Adapter MyGridAdapter = new Adapter();
MyGrid = (GridView)findViewById(R.id.grid);
MyGrid.setAdapter(MyGridAdapter.new ImageAdapter(this, 6, nombreTema));
Ứng dụng chạy, nhưng khi cố gắng để cư trú, tôi nhận được một NullPointerException getLayoutInflater().
Ai đó biết tôi đang thiếu gì hoặc làm cách nào để hoạt động bình thường?
GDActivity có mở rộng 'Activity' không? – Squonk
Yup, là Hoạt động Greendroid –
Từ quan điểm OO, Bộ điều hợp không phải là Hoạt động, mã của bạn không hợp lý. Bạn tìm kiếm sự đơn giản nhưng kết thúc với thời gian và sự phức tạp, cách Google đề xuất có thể không hoàn hảo nhất, nhưng đó là cách hợp lý và hiệu quả nhất, ít nhất là IMO. – yorkw