Пройти пакет без запуска - PullRequest
1 голос
/ 25 марта 2011

Мне нужно передать ArrayList в действие, чтобы я мог перечислить его там, но я не хочу начинать это действие прямо сейчас.Мне нужно начать работу со списком с помощью другого нажатия кнопки «Показать отсканированный список».Потому что кнопка, на которую я хочу поставить проход, содержит только команду finish (), которую я использую, чтобы вернуться в главное меню, когда я подготовил свой список, и из этого меню перейти к кнопке «Показать список».другое действие, единственный способ, которым я знаю, как передать связку, является намерением.Но это снова запустит меню Activity.Я надеюсь, что кто-то может понять проблему, мне может понадобиться помощь здесь.

Спасибо впереди.

- РЕДАКТИРОВАТЬ -

package org.example.sudoku;

import java.util.ArrayList;

import android.app.Activity;
import android.app.ListActivity;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.content.Intent;



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

        setContentView(R.layout.main);

     // Set up click listeners for all the buttons

        View exitButton = findViewById(R.id.exit_button);
        exitButton.setOnClickListener(this);
        View scanButton = findViewById(R.id.scan_button);
        scanButton.setOnClickListener(this);
        View editButton = findViewById(R.id.about_button);
        editButton.setOnClickListener(this);

    }
    public void onClick(View v) {
        switch (v.getId()) {
        case R.id.scan_button:
            Intent intent = new Intent("com.google.zxing.client.android.SCAN");
            intent.putExtra("com.google.zxing.client.android.SCAN.SCAN_MODE", "ONE_D_MODE");
            startActivityForResult(intent, 0);
        break;
        case R.id.about_button:
            ArrayList<String> scanList = new ArrayList<String>();
            scanList.add("asd");
            scanList.add("asd2");
            scanList.add("asd3");
            //String[] names = new String[] { "Linux", "Windows7", "Eclipse", "Suse", "Ubuntu", "Solaris", "Android", "iPhone"};
            Intent about = new Intent(this.getApplicationContext(),About.class);
            Bundle b = new Bundle();

            b.putStringArrayList("key", scanList);


            about.putExtras(b);
            startActivityForResult(about, 0);
        break;
        case R.id.exit_button:
            finish();
        break;


                    }
                }



    public void onActivityResult(int requestCode, int resultCode, Intent intent) {
        if (requestCode == 0) {
            if (resultCode == RESULT_OK) {
                String contents = intent.getStringExtra("SCAN_RESULT");
                // Handle successful scan
                Intent result = new Intent(this.getApplicationContext(),Result.class);
                Bundle b = new Bundle();
                b.putString("content",contents);
                result.putExtras(b);
                startActivityForResult(result, 0);



            } else if (resultCode == RESULT_CANCELED) {
                // Handle cancel
            }
        }
    }

}

это мойосновная деятельность.Я не знаю, правильно ли я понимаю, но мне просто нужен еще один публичный void onActivityResult (int requestCode, int resultCode, Intent intent), который будет обрабатывать законченное действие C, которое было вызвано действием B?А один будет знать, что является причиной активности B идентификатора?Я надеюсь, что получил это.

Ответы [ 3 ]

3 голосов
/ 25 марта 2011

Так что, если я понял вопрос, у вас следующая ситуация.У вас есть действие A, с которого вы начали действие B (в котором вы генерируете требуемый ArrayList), затем вы заканчиваете () действие B, а из действия A вы хотите запустить действие C с созданным списком.Если это ваш сценарий, лучшим подходом будет использование результата активности.В действии B вызовите http://developer.android.com/reference/android/app/Activity.html#setResult(int, android.content.Intent), который принимает связку и передает ArrayList обратно в занятие A. Затем, когда вы запускаете занятие C, передайте его.

Вы должны запуститьДействие B путем вызова http://developer.android.com/reference/android/app/Activity.html#startActivityForResult(android.content.Intent, int) и обработки результата в onActivityResult ()

0 голосов
/ 25 марта 2011

Правильный способ сделать это, кажется, передать ваш список как дополнительный в FLAG_ACTIVITY_CLEAR_TOP намерение:

Intent intent = new Intent(this, MainActivity.class);
intent.putExtra("list", myList);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);

Это произойдет, когда ваш пользователь нажмет кнопку. FLAG_ACTIVITY_CLEAR_TOP завершит все действия, которые находятся на вершине MainActivity, так что вам не нужно беспокоиться о вызове finish(). Он также перезапустит MainActivity, и вы прочитаете свои данные обратно в методе onCreate.

0 голосов
/ 25 марта 2011

Вы должны переосмыслить свой подход. Вы не сможете «работать» с ArrayList внутри Activity без прохождения onCreate (); Похоже, вам нужен другой вид деятельности или класс, который может работать с вашим ArrayList.

...