单击列表视图时从assetfolder打开图像

时间:2014-04-16 06:14:20

标签: android listview imageview

我想从imageview中的资源文件夹中打开图像。我在列表视图中有图像的名称。每当用户按下任何列表项时,它应该显示另一个布局文件,其中将有图像显示在imageview.different列表项中使用不同的图像。如果可能请提供一些伪代码。我有这个列表视图。

public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    CopyReadAssets();
            AssetManager asset = getAssets();
    try {
        final String[] arrdata = asset.list("IMAGEfolder");
        List<String> imagelist = new ArrayList<String>();
        int size = arrdata.length;
        for(int i = 0;i<size;i++)
        {
          if(arrdata[i].contains(".png"))

          {
            imagelist.add(arrdata[i]); 
           }
        }
        ArrayAdapter<String> adapter= new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,imagelist);
        ListView listView = (ListView) findViewById(R.id.listView1);
        listView.setAdapter(adapter);
        listView.setOnItemClickListener(new OnItemClickListener() {

            @Override
             public void onItemClick(AdapterView<?> parent, View view,
                        int position, long id) {
                if(position == 0 ) {
Intent intent = new Intent(Advertise.this,Advertise_image.class);
                intent.putExtra("name", imagelist.get(position).toString());
                startActivity(intent);
}

这是我的Adert​​ise_image.java文件

public class Advertise_image extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.advertise_image);
    InputStream ip =null;
    try {
        ip=getAssets().open("ImageFolder/"+getIntent().getStringExtra("name"));
        Bitmap bitmap=BitmapFactory.decodeStream(ip);
        ImageView iv = (ImageView) findViewById(R.id.advertiseimage);
        iv.setImageBitmap(bitmap);
    }catch(Exception e) {
        e.printStackTrace();
    }finally {
        if(ip!=null)
            try {
                ip.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
    }
}

}

这是我的布局文件

 <?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/advertiseimage"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
      />
</RelativeLayout>

我的堆栈跟踪如下

    04-16 16:29:52.112: W/System.err(1106): java.io.FileNotFoundException: icon.png
04-16 16:29:52.122: W/System.err(1106):     at android.content.res.AssetManager.openAsset(Native Method)
04-16 16:29:52.122: W/System.err(1106):     at android.content.res.AssetManager.open(AssetManager.java:315)
04-16 16:29:52.122: W/System.err(1106):     at android.content.res.AssetManager.open(AssetManager.java:289)
04-16 16:29:52.122: W/System.err(1106):     at com.example.allahummalabbaik.Advertise_image.onCreate(Advertise_image.java:20)
04-16 16:29:52.132: W/System.err(1106):     at android.app.Activity.performCreate(Activity.java:4465)
04-16 16:29:52.132: W/System.err(1106):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
04-16 16:29:52.132: W/System.err(1106):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920)
04-16 16:29:52.132: W/System.err(1106):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
04-16 16:29:52.132: W/System.err(1106):     at android.app.ActivityThread.access$600(ActivityThread.java:123)
04-16 16:29:52.132: W/System.err(1106):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
04-16 16:29:52.142: W/System.err(1106):     at android.os.Handler.dispatchMessage(Handler.java:99)
04-16 16:29:52.142: W/System.err(1106):     at android.os.Looper.loop(Looper.java:137)
04-16 16:29:52.152: W/System.err(1106):     at android.app.ActivityThread.main(ActivityThread.java:4424)
04-16 16:29:52.152: W/System.err(1106):     at java.lang.reflect.Method.invokeNative(Native Method)
04-16 16:29:52.152: W/System.err(1106):     at java.lang.reflect.Method.invoke(Method.java:511)
04-16 16:29:52.152: W/System.err(1106):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)

终于解决了我的问题..谢谢你们所有人的帮助....

3 个答案:

答案 0 :(得分:1)

我没有完全理解下一个布局文件的含义,但我认为这是另一项活动。所以你走了:

在你的onitemclick中,将字符串传递给另一个活动:

public void onItemClick(AdapterView<?> parent, View view,
                        int position, long id) {

        Intent intent = new Intent(MainActivity.this , YourImageViewActivity.class);
        intent.putExtra("image" , imagelist.get(position).toString());
        startActivity(intent);
}

在您的imageview活动中,调用此方法将图像设置为imageview:

            InputStream yourBitmap=null;

            try {
                yourBitmap = getAssets().open(getIntent().getStringExtra("image"));
                Bitmap bitmap=BitmapFactory.decodeStream(yourBitmap);
                imageView.setImageBitmap(bitmap);
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                if(yourBitmap!=null)
                    yourBitmap.close();
            }

如果您的意思是相同的布局,只需将点击字符串设置为全局字符串,然后使用我提供的第二个代码将其设置为您的imageview。

答案 1 :(得分:0)

尝试以下代码: -

private Bitmap getBitmapFromAsset(String strName)
    {
        AssetManager assetManager = getAssets();
        InputStream istr = null;
        try {
            istr = assetManager.open(strName);
        } catch (IOException e) {
            e.printStackTrace();
        }
        Bitmap bitmap = BitmapFactory.decodeStream(istr);
        return bitmap;
    }

http://www.javacodegeeks.com/2012/02/android-read-file-from-assets.html

答案 2 :(得分:0)

希望此代码可以帮助您

InputStream bitmap=null;

    try {
        bitmap=getAssets().open("icon.png");
        Bitmap bit=BitmapFactory.decodeStream(bitmap);
        img.setImageBitmap(bit);
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        if(bitmap!=null)
        bitmap.close();
    }