Относительно простое задание: как передать выбранный элемент из одного занятия в другое?

1

У меня есть два вида деятельности: один показывает изображение и кнопку, а другой - фотогалерею. Я хочу, чтобы можно было выбрать любое изображение в галерее, а затем отображать их в первом действии вместо изображения по умолчанию.

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.gallery);

    Gallery g = (Gallery) findViewById(R.id.gallery);
    g.setAdapter(new ImageAdapter(this));

    g.setOnItemClickListener(new OnItemClickListener() {
        public void onItemClick(AdapterView parent, View v, int position, long id) {
            Toast.makeText(PhotoGallery.this, "Position: " + id, Toast.LENGTH_SHORT).show();

            Intent intent=new Intent();   
            intent.putExtra("PictureID", position);
            setResult(RESULT_OK, intent);
            finish();


        }
    });
}

Я даже здесь закрылся? Я не совсем уверен, что делать с любой строкой или int, которую я бы привязал к Intent - могу ли я прикрепить сам объект? Я бы скорее отказался, как минимум, от имени строки ресурса (изображения), но единственное, что я могу понять сейчас, это то, как передать позицию изображения... не отличное решение. Я могу уточнить больше, если необходимо - спасибо.

EDIT:

Для тех, кто сталкивается с этим в будущем, вот результат моего приложения. Простой, но работает! http://www.youtube.com/watch?v=WJjEvwy8yDc

  • 0
    Вы вызываете второе действие с помощью startActivityForResult, а не просто startActivity? Для помещения объектов в намерение они должны быть пригодны для обработки ( developer.android.com/reference/android/os/Parcelable.html ), но я бы предпочел просто передать индекс / положение изображения или идентификатор ресурса.
  • 0
    Да, я вызывал его с помощью startActivityForResult. Я предпочел бы передать resourceid .. как я могу получить доступ к этому? (Это мое самое первое приложение для Android, таким образом, массовое недоумение:])
Теги:

1 ответ

1
Лучший ответ

Поскольку вы новичок в Android, вы должны взглянуть на образцы Android, поставляемые с SDK. То, что вы хотите сделать, может быть достигнуто с помощью ImageSwitcher. Вы можете взглянуть на пример ImageSwitcher в образце Android ApiDemos.

Пример из образцов Android:

ImageSwitcher1.java

/*
 * Copyright (C) 2007 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.example.android.apis.view;

import com.example.android.apis.R;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.view.animation.AnimationUtils;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.Gallery;
import android.widget.Gallery.LayoutParams;
import android.widget.ImageSwitcher;
import android.widget.ImageView;
import android.widget.ViewSwitcher;


public class ImageSwitcher1 extends Activity implements
        AdapterView.OnItemSelectedListener, ViewSwitcher.ViewFactory {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);

        setContentView(R.layout.image_switcher_1);

        mSwitcher = (ImageSwitcher) findViewById(R.id.switcher);
        mSwitcher.setFactory(this);
        mSwitcher.setInAnimation(AnimationUtils.loadAnimation(this,
                android.R.anim.fade_in));
        mSwitcher.setOutAnimation(AnimationUtils.loadAnimation(this,
                android.R.anim.fade_out));

        Gallery g = (Gallery) findViewById(R.id.gallery);
        g.setAdapter(new ImageAdapter(this));
        g.setOnItemSelectedListener(this);
    }

    public void onItemSelected(AdapterView parent, View v, int position, long id) {
        mSwitcher.setImageResource(mImageIds[position]);
    }

    public void onNothingSelected(AdapterView parent) {
    }

    public View makeView() {
        ImageView i = new ImageView(this);
        i.setBackgroundColor(0xFF000000);
        i.setScaleType(ImageView.ScaleType.FIT_CENTER);
        i.setLayoutParams(new ImageSwitcher.LayoutParams(LayoutParams.MATCH_PARENT,
                LayoutParams.MATCH_PARENT));
        return i;
    }

    private ImageSwitcher mSwitcher;

    public class ImageAdapter extends BaseAdapter {
        public ImageAdapter(Context c) {
            mContext = c;
        }

        public int getCount() {
            return mThumbIds.length;
        }

        public Object getItem(int position) {
            return position;
        }

        public long getItemId(int position) {
            return position;
        }

        public View getView(int position, View convertView, ViewGroup parent) {
            ImageView i = new ImageView(mContext);

            i.setImageResource(mThumbIds[position]);
            i.setAdjustViewBounds(true);
            i.setLayoutParams(new Gallery.LayoutParams(
                    LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
            i.setBackgroundResource(R.drawable.picture_frame);
            return i;
        }

        private Context mContext;

    }

    private Integer[] mThumbIds = {
            R.drawable.sample_thumb_0, R.drawable.sample_thumb_1,
            R.drawable.sample_thumb_2, R.drawable.sample_thumb_3,
            R.drawable.sample_thumb_4, R.drawable.sample_thumb_5,
            R.drawable.sample_thumb_6, R.drawable.sample_thumb_7};

    private Integer[] mImageIds = {
            R.drawable.sample_0, R.drawable.sample_1, R.drawable.sample_2,
            R.drawable.sample_3, R.drawable.sample_4, R.drawable.sample_5,
            R.drawable.sample_6, R.drawable.sample_7};

}

image_switcher_1.xml

<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2007 The Android Open Source Project

     Licensed under the Apache License, Version 2.0 (the "License");
     you may not use this file except in compliance with the License.
     You may obtain a copy of the License at

          http://www.apache.org/licenses/LICENSE-2.0

     Unless required by applicable law or agreed to in writing, software
     distributed under the License is distributed on an "AS IS" BASIS,
     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     See the License for the specific language governing permissions and
     limitations under the License.
-->

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <ImageSwitcher android:id="@+id/switcher"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_alignParentTop="true"
        android:layout_alignParentLeft="true"
    />

    <Gallery android:id="@+id/gallery"
        android:background="#55000000"
        android:layout_width="match_parent"
        android:layout_height="60dp"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"

        android:gravity="center_vertical"
        android:spacing="16dp"
    />

</RelativeLayout>
  • 0
    Спасибо, я прочту это внимательно - просто чтобы продолжить, я смог решить свою проблему, просто вернув позицию назад, а затем создав тот же массив в начальном действии. Затем я просто рассматриваю позицию как индекс и заменяю это изображение на изображение с возвращенным индексом.
  • 0
    Это также сработает, но я просто хотел показать вам более стандартный способ делать то, что вы хотели сделать.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню