Android - передача переменной из намерения дополнительно в ImageView
Android новичок здесь. Я пытаюсь настроить вид деятельности для отображения выбранного изображения. Основой этого кода является Hello, Android 3rd edition (Pragmatic Programmer), который я попытался изменить.
По сути, я хочу иметь возможность нажимать кнопку в одном действии, и это позволяет запускать другое действие, изменяющее макет для отображения изображения, связанного с этой кнопкой. У меня есть несколько кнопок, и я хочу, чтобы каждая кнопка отображала различное изображение.
файлы (упрощенный код путем удаления 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 для src ImageView в viewer.xml).
Тем не менее, я узнал из поиска и чтения на этом форуме, что я не могу изменить значения strings.xml из действия (моя первоначальная идея состояла в том, чтобы в Viewer.java было несколько строк кода, которые бы изменили строку imagename на то, что было передано по интентам
Я нашел этот пост (http://stackru.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 ответ
Ваш вопрос не очень понятен, но, насколько я понимаю, вы можете добиться этого, используя следующий код.
AndroidManifest.xml:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.stackru.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.stackru.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.stackru.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>
С pic1.png, pic2.png и pingouin.png в res/drawable…