我试图创建一个列表视图,如果按下该列表上的某个项目,它会全屏显示一个图像。我在列表中有大约10个不同的项目,我想为每个项目显示不同的图像。
我使用了本教程:http://www.androidhive.info/2011/10/android-listview-tutorial/
但是我没有显示我的字符串项的名称,而是希望它显示图像。我该如何解决这个问题?
我一直在尝试检查其他问题,但是因为我刚接触到这些问题所以很难跟进。
答案 0 :(得分:0)
您可以使用传递的项目来检查应在imageview中显示哪个图像,而不是在SingleListItem类中显示项目/文本。这样的事情:
public class SingleListItem extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.setContentView(R.layout.single_list_item_view);
// TextView txtProduct = (TextView) findViewById(R.id.product_label);
ImageView image = (ImageView) findViewById(R.id.someImage);
Intent i = getIntent();
// getting attached intent data
String product = i.getStringExtra("product");
// displaying selected product name
if (product.equals("item1")) {
image.setDrawableResource(R.drawable.YOURIMAGE);
} else if (product.equals("item2"))
image.setDrawableResource(R.drawable.ANOTHERIMAGE);
}
}
答案 1 :(得分:0)
首先,您需要在drawable文件夹中为所有不同的项目提供图像(在列表视图中) 将single_list_item.xml更改为
single_list_item_view.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView android:id="@+id/image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
</LinearLayout>
更改您的SingleListItem.java
package com.androidhive.androidlistview;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.TextView;
public class SingleListItem extends Activity{
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.setContentView(R.layout.single_list_item_view);
ImageView productimage = (ImageView) findViewById(R.id.image);
Intent i = getIntent();
// getting attached intent data
String product = i.getStringExtra("product");
// displaying selected product name
switch(product){
case "item1":
productimage.setImageDrawable(R.drawable.image1);
break;
case "item2":
productimage.setImageDrawable(R.drawable.image2);
break;
case "item3":
productimage.setImageDrawable(R.drawable.image3);
break;
.
.
.
.
.
//upto all 10 images
}
}
}
答案 2 :(得分:0)
只需对教程代码进行一些更改,您就可以做到这一点。
首先,在single_list_item_view.xml
中,您需要使用ImageView
而不是TextView
,因为您想要显示图片。您可以找到图像视图的文档,包括它们支持的属性on the Android developer site。
其次,您需要更改查找TextView
的行,以便找到新的ImageView
。这只需要更改以下行:
TextView txtProduct = (TextView) findViewById(R.id.product_label);
为:
// Assuming you gave your ImageView the id "product_image" in single_list_item_view.xml
ImageView productImage = (ImageView) findViewById(R.id.product_image);
您需要将要显示的图像添加到项目中。这些最简单的地方是res/drawable
文件夹。图像文件的名称将决定它们的“ID”。例如,如果您有res/drawable/photoshop.png
,则可以使用ID R.drawable.photoshop
来引用它。
接下来,您需要确定要在SingleListItem
中显示哪个图像。点击列表中某个项目的关键部分是SingleListItem
:
Intent i = getIntent();
String product = i.getStringExtra("product");
相应地,在AndroidListViewActivity
:
Intent i = new Intent(getApplicationContext(), SingleListItem.class);
i.putExtra("product", product);
startActivity(i);
Intent
是您将列表活动中的信息发送到显示该项目的活动的方式。在这种情况下,发送的信息是要显示的项目。您有一些关于如何执行此部分的选项。一种简单的方法是检查product
字符串并选择适当的drawable:
int imageId = -1;
if (product.equals("Adobe After Effects")) {
imageId = R.drawable.after_effects;
} else if (product.equals("Adobe Bridge")) {
imageId = R.drawable.bridge;
} else if ...
... // All your other cases
}
这种方法显然不能很好地扩展,但它可以用于您的简单示例。另一种可能的方法是传递Intent
中的图像ID,而不是产品名称,例如:
// In AndroidListViewActivity:
i.putExtra("product", R.drawable.after_effects);
// In SingleListItem:
int imageId = i.getIntExtra("product", -1);
// -1 in the call above is the value to return if "product" is not in the Intent
您需要做的最后一件事是为之前找到的Drawable
设置ImageView
:
// Make sure to check that the id is valid before using it
if (imageId != -1) {
Drawable d = getResources().getDrawable(imageId);
productImage.setDrawable(d);
}
getResources()
为您的应用程序提取Resources
对象。您可以使用Resources
对象查找您在res
文件夹中定义的字符串和drawable等内容。您正在使用的教程也使用它来查找res
文件夹中的字符串数组。同样,您可以在Android developer site上看到Resources
支持的所有内容。