单击列表视图项并显示图像

时间:2014-09-21 19:34:18

标签: java android eclipse listview

我试图创建一个列表视图,如果按下该列表上的某个项目,它会全屏显示一个图像。我在列表中有大约10个不同的项目,我想为每个项目显示不同的图像。

我使用了本教程:http://www.androidhive.info/2011/10/android-listview-tutorial/

但是我没有显示我的字符串项的名称,而是希望它显示图像。我该如何解决这个问题?

我一直在尝试检查其他问题,但是因为我刚接触到这些问题所以很难跟进。

3 个答案:

答案 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支持的所有内容。