android - 从intent extra传递变量到ImageView

时间:2011-09-23 05:37:15

标签: android imageview android-intent

Android新人在这里。我正在尝试设置活动以显示所选图像。这段代码的基础来自我试图修改的Hello,Android第3版(实用程序员)。

基本上,我希望能够单击一个活动中的按钮,并启动另一个更改布局的活动,以显示与该按钮关联的图像。我有几个按钮,并希望每个按钮都能显示不同的图像。

文件(删除pic3 -...简化代码):

main.xml:两个按钮的布局(pic1和pic2)

Main.java:包含按钮的onclicklisteners - 意图w / extras(图像文件名)

Viewer.java:默认由eclipse创建,目的是设置新的布局setContentView(R.layout.viewer);

viewer.xml:ImageView的布局

我已经将字符串存储在strings.xml中了(我在eclipse中创建一个字符串,其值为@ drawable / pic1并给它一个imagename的名称,所以我可以调用@ string / imagename作为ImageView的src viewer.xml)。

但是,我从这个论坛上的搜索和阅读中学到了我无法在一个活动中更改strings.xml值(我最初的想法是在Viewer.java中有几行代码可以将imagename字符串更改为任何附加内容传递的内容。

我发现这篇帖子(http://stackoverflow.com/questions/3523384/android-pass-string-from-activity-to-layout)有人试图用TextView做类似的事情,但我'我尝试了这条路线,并且不断在这些路线上出现语法错误。

我真的被困住了。有任何想法吗? 谢谢!

main.java

public class Main extends Activity implements OnClickListener {

@Override
public void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   setContentView(R.layout.main);


// click listeners
View pic1Button = findViewById(R.id.pic1_button);
pic1Button.setOnClickListener(this);
View pic2Button = findViewById(R.id.pic2_button);
pic2Button.setOnClickListener(this);

}

// ...
public void onClick(View v) {
switch (v.getId()) {

   case R.id.pic1_button:
      Intent l = new Intent(this, Viewer.class);
      l.putExtra("imagefilename", "pic1filename");
      startActivity(l);
      break;

   case R.id.pic2_button:
      Intent i = new Intent(this, Viewer.class);
      i.putExtra("imagefilename", "pic2filename");
      startActivity(i);
      break;

}
}
}

viewer.xml

<?xml version="1.0" encoding="utf-8"?>

<FrameLayout
   xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="fill_parent"
   android:layout_height="fill_parent">
   <ImageView android:id="@+id/imageView"
      android:layout_width="fill_parent"
      android:layout_height="fill_parent"
      android:src='@string/imagename'
      android:scaleType="matrix">
   </ImageView>

</FrameLayout>

1 个答案:

答案 0 :(得分:0)

您的问题不是很清楚,但根据我的理解,您可以使用以下代码实现这一目标。

的AndroidManifest.xml:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.stackoverflow.biowi"
      android:versionCode="1"
      android:versionName="1.0">
     <application android:label="@string/app_name" android:icon="@drawable/icon">
        <activity android:name="Main"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name="Viewer" />
    </application>
</manifest>

Main.java:

package com.stackoverflow.biowi;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class Main extends Activity implements OnClickListener
{
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        // click listeners
        View pic1Button = findViewById(R.id.pic1_button);
        pic1Button.setOnClickListener(this);
        View pic2Button = findViewById(R.id.pic2_button);
        pic2Button.setOnClickListener(this);
    }

    public void onClick(View v) {

        Intent i = new Intent(this, Viewer.class);

        switch (v.getId()) {
        case R.id.pic1_button:
            i.putExtra("imagefilename", "pic1filename");
            break;
        case R.id.pic2_button:
            i.putExtra("imagefilename", "pic2filename");
            break;
         }
        startActivity(i);
    }
}

Viewer.java:

package com.stackoverflow.biowi;

import android.app.Activity;
import android.os.Bundle;
import android.widget.ImageView;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.view.View;
import android.widget.ImageView;

public class Viewer extends Activity
{

    /** To be documented. */
    private Bitmap mImage1;
    /** To be documented. */
    private Bitmap mImage2;

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

        Bundle bundle = getIntent().getExtras();
        String imageName = bundle.getString("imagefilename");


        // click listeners
        ImageView imageView = (ImageView)findViewById(R.id.imageView);

        mImage1 = BitmapFactory.decodeResource(getResources(), R.drawable.pic1);
        mImage2 = BitmapFactory.decodeResource(getResources(), R.drawable.pic2);

        if(imageName.matches("pic1filename")) {
            imageView.setImageBitmap(mImage1);
        } else if (imageName.matches("pic2filename")) {
            imageView.setImageBitmap(mImage2);
        }
    }

}

main.xml中:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:layout_width="fill_parent"
              android:layout_height="fill_parent"
              >
  <TextView
      android:layout_width="fill_parent"
      android:layout_height="wrap_content"
      android:text="Hello World, Main"
      />
  <Button android:id="@+id/pic1_button"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:text="Hello, I am a Button" />
  <Button android:id="@+id/pic2_button"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:text="Hello, I am a Button" />
</LinearLayout>

viewer.xml:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
  <ImageView android:id="@+id/imageView"
             android:layout_width="fill_parent"
             android:layout_height="fill_parent"
             android:src='@drawable/pingouin'
             android:scaleType="matrix">
  </ImageView>
</FrameLayout>

在res / drawable中使用pic1.png,pic2.png和pingouin.png ......