java - 仅包含图像的 ListView

标签 java android eclipse image listview

我只是问自己是否有一种方法可以制作没有任何文本的 ListView。我只找到了带有图像+文本的ListView,而这正是我不想要的。我只想添加很多图像(例如在列表中),而不想使用 ImageView 来添加它,因为这会使我的应用程序崩溃。另外,我不希望我的应用程序滞后。谢谢!

这是我在 Activity_main.xml 中得到的

<ListView
android:id="@+id/listview"
android:layout_width="fill_parent"
android:layout_height="wrap_content"

/>

我从另一篇文章中发现了这个,它实际上对我有帮助,但它没有显示所有图像

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

最佳答案

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

构建快速图像ListView ,您要做的第一件事是添加 Picasso到你的项目。这个库会自动下载并缓存你的图片,处理ImageView回收等。

您要做的下一件事是编写项目 View 。如果您想要一个仅包含图像的列表,则 View 可以如此简单:

<!-- 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>图像 URL 作为输入,构建项目并将它们插入到 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 上使用适配器,将其添加到您的 Activity 的 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为此。

关于java - 仅包含图像的 ListView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21894766/

相关文章:

java - 比较数组中的数字

java - GCM 未在 Android 4.0.4 设备上接收消息

android - 如何使用 "-*"在 sqlite fts3 表中查询?

java - 如何找回 "Eclipse >Generate>Jaxb classes"选项?

java - 缺少对本地安装 Artifact 的 Maven 依赖

java - 在用java编程时,我得到这个错误,有谁能告诉我到底出了什么问题吗?

java - SpringBoot冲突数据库配置

android - 如何在 uiautomator 测试用例中获取上下文?

android - 掷骰子的物理思路

sql - 有没有适用于 Eclipse 的 SQL 格式化插件?