ListView仅包含图像

时间:2014-02-19 23:20:49

标签: java android eclipse image listview

我只是问自己是否有一种方法可以制作没有任何文本的ListView。我只发现带有图像+文本的ListViews,这正是我不想要的。我只想在列表中添加很多图像,并且不想使用ImageView,因为这会使我的应用程序崩溃。此外,我不希望我的应用程序滞后。谢谢!

这是我在activity_main.xml

中得到的
<ListView
android:id="@+id/listview"
android:layout_width="fill_parent"
android:layout_height="wrap_content"

/&GT;

我从另一个实际帮助我的帖子中找到了这个,但它并没有显示所有图像

public class MainActivity extends Activity {


// Array of integers points to images stored in /res/drawable-hdpi/
int[] vehs = new int[]{
    R.drawable.veh1,
    R.drawable.veh2,
    R.drawable.veh3,
    R.drawable.veh4,
    R.drawable.veh5,
    R.drawable.veh6,
    R.drawable.veh7,
    R.drawable.veh8,
    R.drawable.veh9,
    R.drawable.veh10,
    R.drawable.veh11,
    R.drawable.veh12,
    R.drawable.veh13,
    R.drawable.veh14,
    R.drawable.veh15,
    R.drawable.veh16,
    R.drawable.veh17,
    R.drawable.veh18,
    R.drawable.veh19,
    R.drawable.veh20,
    R.drawable.veh21,
    R.drawable.veh22,
    R.drawable.veh23,
    R.drawable.veh24,
    R.drawable.veh25,
    R.drawable.veh26,
    R.drawable.veh27,
    R.drawable.veh28,
    R.drawable.veh29,
    R.drawable.veh30,
    R.drawable.veh31,
    R.drawable.veh32,
    R.drawable.veh33,
    R.drawable.veh34,
    R.drawable.veh35,
    R.drawable.veh36,
};


/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    // Each row in the list stores country name, currency and flag
    List<HashMap<String,String>> aList = new ArrayList<HashMap<String,String>>();

    for(int i=0;i<10;i++){
        HashMap<String, String> hm = new HashMap<String,String>();
        hm.put("vehs", Integer.toString(vehs[i]) );
        aList.add(hm);
    }

    // Keys used in Hashmap
    String[] from = { "vehs","txt","cur" };

    // Ids of views in listview_layout
    int[] to = { R.id.vehs,R.id.txt,R.id.cur};

    // Instantiating an adapter to store each items
    // R.layout.listview_layout defines the layout of each item
    SimpleAdapter adapter = new SimpleAdapter(getBaseContext(), aList, R.layout.listview_layout, from, to);

    // Getting a reference to listview of main.xml layout file
    ListView listView = ( ListView ) findViewById(R.id.listview);

    // Setting the adapter to the listView
    listView.setAdapter(adapter);
}

}

没有编辑所有代码,所以你可能会发现一些混淆xD的东西

2 个答案:

答案 0 :(得分:1)

ListView显示数据的方式是使用适配器。适配器获取您的数据,将其插入自定义视图,然后将其添加到列表中。

要构建快速图片ListView,您要做的第一件事就是将Picasso添加到您的项目中。该库将自动下载和缓存您的图像,处理ImageView回收等。

您要做的下一件事是编写项目视图。如果您想要一个仅限图像的列表,那么视图可以像以下一样简单:

<!-- res/layout/list_item.xml -->

<?xml version="1.0" encoding="utf-8"?>
<ImageView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="?android:attr/listPreferredItemHeight" />

接下来,您要创建适配器。它接受List<String>个图片网址作为输入,构建项目并将其插入ListView

public class ImageListAdapter extends ArrayAdapter<String> {
    List<String> items;

    public ImageListAdapter(Context context, int resource, List<String> items) {
        super(context, resource, items);
        this.items = items;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        if (convertView == null) {
            LayoutInflater inflater = LayoutInflater.from(getContext());
            convertView = inflater.inflate(R.layout.list_item, null);
        }

        Picasso.with(getContext())
               .load(items.get(position))
               .into((ImageView) convertView);

        return convertView;
    }
}

如果要添加更多选项(如图像占位符,转换等),请阅读Picasso library documentation

最后,要在ListView上使用适配器,请将其添加到您的活动的onCreate方法中:

List<String> images = new ArrayList<String>();
images.add("http://hometowncolumbia.files.wordpress.com/2007/12/lol-cats-dont-look-behind-cat.jpg");
images.add("http://i232.photobucket.com/albums/ee245/topswing/cat-lol.jpg");

listView = (ListView)findViewById(R.id.myListView);
listView.setAdapter(new ImageListAdapter(this, R.layout.list_item, images))

在实际应用程序中,您可能希望从服务器加载图像列表。您需要使用AsyncTask

答案 1 :(得分:0)

不要让事情变得困难,解决方案在经典的3个步骤中很简单

步骤1:
在XML中创建RelativeLayout。将图像移动到所需位置(始终为中心,但您可以选择向左还是向右)并将layout_height更改为wrap_content

步骤2:
为ListView创建自定义适配器,如果这样做,您将能够将所有布局作为项目

public class ImagesAdapter extends ArrayAdapter<String> {

    private Activity mContext;
    private ArrayList<Bitmap> mImages;

    public ImagesAdapter(Activity context, ArrayList<String> listOfValues, ArrayList<Bitmap> images) {
        //The listOfValues is used when you make item click to get value
        //Each image must to have a text value
        super(context, R.layout.yourlayout, listOfValues);
        mContext = context;
        mImages = images;
    }

    @Override
    public void getView(int position, View convertView, ViewGroup parent) {
        LayoutInflater inflater = mContext.getLayoutInflater();
        View returnView = inflater.inflate(R.layout.yourlayout, null);
        ImageView imageView = (ImageView) returnView.findViewById(R.id.yourimageid);
        imageView.setImageBitmap(mImages.get(position));
        return returnView;
    }

}

步骤3:
在您的代码中实施

ImagesAdapter adapter = new ImagesAdapter(this, myList, myImages);
mylistView.setAdapter(adapter);
myListView.setOnItemClickListener(new OnItemClickListener() {

    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        //volov = Values Of ListOfValues
        String volov = (String) myListView.getItemPosition(position);
        Log.i(TAG, "listOfValues is useful " + volov);
    }

});