Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/215.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android位图列表视图_Android_Listview - Fatal编程技术网

Android位图列表视图

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

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_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;
}
}