Android位图列表视图
ima试图在我的listview中添加图像,但出现以下错误:Android位图列表视图,android,listview,Android,Listview,ima试图在我的listview中添加图像,但出现以下错误: You must supply a resource ID for a TextView 这是菜单布局,menu.xml: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_par
You must supply a resource ID for a TextView
这是菜单布局,menu.xml:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/sahovnica"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MenuActivity" >
<ImageView
android:id="@+id/imageView_Menu_Title"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:contentDescription="@string/app_name"
android:src="@drawable/vh_title" />
<ListView
android:id="@+id/listView_Menu"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/imageView_Menu_Title" >
</ListView>
这是list_item.xml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<ImageView
android:id="@+id/imageView_List_Item"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:contentDescription="@string/app_name"
android:src="@drawable/ic_launcher" />
</RelativeLayout>
这是我的代码:
public class MenuActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.menu);
ListView list = (ListView)findViewById(R.id.listView_Menu);
Bitmap[] images = { decodeImage(R.drawable.igraj),
decodeImage(R.drawable.rezultati),
decodeImage(R.drawable.postavke),
decodeImage(R.drawable.pomoc), decodeImage(R.drawable.izlaz)};
ArrayAdapter<Bitmap> adapter = new ArrayAdapter<Bitmap>(this, R.layout.list_item,
images);
list.setAdapter(adapter);
}
private Bitmap decodeImage(int res) {
Bitmap bitmap = BitmapFactory.decodeResource(getResources(),res);
return bitmap;
}
}
公共类菜单活动扩展活动{
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.menu);
ListView列表=(ListView)findViewById(R.id.ListView_菜单);
位图[]图像={解码图像(R.drawable.igraj),
解码图像(R.drawable.rezultati),
解码图像(R.drawable.postavke),
decodeImage(R.drawable.pomoc),decodeImage(R.drawable.izlaz)};
ArrayAdapter=新的ArrayAdapter(此,R.layout.list_项,
图像);
list.setAdapter(适配器);
}
私有位图解码图像(整数分辨率){
位图位图=BitmapFactory.decodeResource(getResources(),res);
返回位图;
}
}
我不知道这意味着什么(错误),因为我试图在ArrayAdapter中放入一些字符串,并将文本视图作为一个项放入list_item.xml中,但它仍然不起作用,但我不明白为什么。
提前感谢。来自:
默认情况下,此类希望提供的资源id引用单个TextView。如果您想使用更复杂的布局,请使用也具有字段id的构造函数。该字段id应引用较大布局资源中的TextView
[……]
若要在数组显示中使用文本视图以外的内容,例如ImageView,或者要让toString()结果之外的一些数据填充视图,请重写getView(int、View、ViewGroup)以返回所需的视图类型
您需要创建自己的BaseAdapter
实现,或者创建自己的ArrayAdapter
子类并重写getView()
使用图像的简单的getView()
可能如下所示:
@Override
public View getView (int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = ((Activity) mContext).getLayoutInflater();
row = inflater.inflateR.layout.list_item, parent, false);
return row;
}
根据以下文件:
正如您所看到的,您需要在R.layout.list\u项引用的布局文件中的TextView
中包含。该布局中只有一个ImageView
对于更复杂的视图(不限于
TextView
),我建议您使用自己的实现。查看ArrayAdapter的构造函数
正如其他人建议的那样,使用CustomAdapter
public class MenuActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.menu);
ListView list = (ListView)findViewById(R.id.listView_Menu);
String[] a ={"hi","bye"};
Bitmap[] images = { decodeImage(R.drawable.igraj),
decodeImage(R.drawable.rezultati),
decodeImage(R.drawable.postavke),
decodeImage(R.drawable.pomoc),
decodeImage(R.drawable.izlaz)
};
CustomAdapter adapter = new CustomAdapter(images);
list.setAdapter(adapter);
}
private Bitmap decodeImage(int res) {
Bitmap bitmap = BitmapFactory.decodeResource(getResources(),res);
return bitmap;
}
class CustomAdapter extends BaseAdapter
{
Bitmap images[];
LayoutInflater inflater;
public CustomAdapter(Bitmap[] Images)
{
images=Images;
inflater= LayoutInflater.from(MenuActivity.this);
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return images.length;
}
@Override
public Object getItem(int arg0) {
// TODO Auto-generated method stub
return arg0;
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
ViewHolder holder;
if(convertView==null)
{
holder = new ViewHolder();
convertView = inflater.inflate(R.layout.list_item, null);
holder.iv= (ImageView) convertView.findViewById(R.id.imageView_List_Item);
convertView.setTag(holder);
}
else {
holder = (ViewHolder)convertView.getTag();
}
holder.iv.setImageBitmap(images[position]);
return convertView;
}
}
class ViewHolder
{
ImageView iv;
}
}
public class MenuActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.menu);
ListView list = (ListView)findViewById(R.id.listView_Menu);
String[] a ={"hi","bye"};
Bitmap[] images = { decodeImage(R.drawable.igraj),
decodeImage(R.drawable.rezultati),
decodeImage(R.drawable.postavke),
decodeImage(R.drawable.pomoc),
decodeImage(R.drawable.izlaz)
};
CustomAdapter adapter = new CustomAdapter(images);
list.setAdapter(adapter);
}
private Bitmap decodeImage(int res) {
Bitmap bitmap = BitmapFactory.decodeResource(getResources(),res);
return bitmap;
}
class CustomAdapter extends BaseAdapter
{
Bitmap images[];
LayoutInflater inflater;
public CustomAdapter(Bitmap[] Images)
{
images=Images;
inflater= LayoutInflater.from(MenuActivity.this);
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return images.length;
}
@Override
public Object getItem(int arg0) {
// TODO Auto-generated method stub
return arg0;
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
ViewHolder holder;
if(convertView==null)
{
holder = new ViewHolder();
convertView = inflater.inflate(R.layout.list_item, null);
holder.iv= (ImageView) convertView.findViewById(R.id.imageView_List_Item);
convertView.setTag(holder);
}
else {
holder = (ViewHolder)convertView.getTag();
}
holder.iv.setImageBitmap(images[position]);
return convertView;
}
}
class ViewHolder
{
ImageView iv;
}
}