Как я могу передавать параметры между двумя действиями, но один должен поддерживать только первый - PullRequest
0 голосов
/ 24 мая 2019

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

Ответы [ 4 ]

0 голосов
/ 24 мая 2019

Я считаю, что лучше всего использовать обратные вызовы.

в Loader: Создать внутренний класс

    MyCallback callback;

viod setCallback(MyCallback callback){
this.callback = callback;
}
viod onStop(){
    callback = null;
}

interface MyCallback{
    void doSomething(Params params);
}

в MainActivity: реализовать ссылку на набор MyCallback в onCreate

Loader loader = new Loader();
loader.setCallback(this);

override method doSomething()
@override
void doSomething(Params params){
 //do your thing with the params…
}

когда задание выполнено внутри Loader, вызовите MainActivity:

callback.doSomething(params);

уничтожить ссылку внутри MainActivity в onStop ()

loader.onStop();
0 голосов
/ 24 мая 2019
//do Some work
Intent i = new Intent(this,MainActivity2..class);
startActivityForResult(i,12);
}

В MainActivity2.class

// after your work complete
Intent i =new Intent();
i.putExtra("result",true);// any data you want to pass
setResult(RESULT_OK,i);

После этого мы обрабатываем результат

protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {

switch(requestCode){

case 12:
    if(resultCode == Activity.RESULT_OK){// onsuccess do something

             boolean isSucces = data.getBooleanExtra("result",false);

     if(isSuccess)// perform action
{// show toast}
}
}
    }
0 голосов
/ 24 мая 2019

Из вашей MainActivity вызовите TargetActivity с помощью startActivityForResult () -

Например:

Intent intent = new Intent(this, TargetActivity.class);
intent.putExtra(); // sent your putExtra data here to pass through intent
startActivityForResult(intent, 1000);

В своем намерении установите данные, которые вы хотите вернуть обратно в MainActivity. Если вы не хотите возвращать какие-либо данные, вам не нужно устанавливать никаких данных.

Например:

В TargetActivity, если вы хотите отправить обратно данные:

Intent returnIntent = new Intent();
returnIntent.putExtra("result", result);
setResult(Activity.RESULT_OK, returnIntent);
finish();

Если вы не хотите возвращать данные:

Intent returnIntent = new Intent();
setResult(Activity.RESULT_CANCELED, returnIntent);
finish();

Теперь в вашем классе MainActivity напишите следующий код для метода onActivityResult ().

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {

    if (requestCode == 1000) {
        if(resultCode == Activity.RESULT_OK){
            String result=data.getStringExtra("result");
        }
        if (resultCode == Activity.RESULT_CANCELED) {
            // Do your task here. 
        }
    }
}
0 голосов
/ 24 мая 2019

С помощью метода android startActivityForResult () вы можете получить результат от другого действия.

С помощью метода android startActivityForResult () вы можете отправлять информацию из одного действия в другое и наоборот. Для метода Android startActivityForResult требуется результат второго действия (вызываемое действие).

В этом случае нам нужно переопределить метод onActivityResult, который вызывается автоматически, когда второе действие возвращает результат.

MainActivity.java

 public class MainActivity extends Activity {  
    TextView textView1;  
    Button button1;  
    @Override  
    protected void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.activity_main);  
        textView1=(TextView)findViewById(R.id.textView1);  
        button1=(Button)findViewById(R.id.button1);  
        button1.setOnClickListener(new OnClickListener() {  
            @Override  
            public void onClick(View arg0) {  
                Intent intent=new Intent(MainActivity.this,SecondActivity.class);  
                startActivityForResult(intent, 2);// Activity is started with 
                                                    requestCode 2  
            }  
        });  
    } 

 // Call Back method  to get the Message form other Activity  
    @Override  
       protected void onActivityResult(int requestCode, int resultCode, Intent data)  
       {  
                 super.onActivityResult(requestCode, resultCode, data);  
                  // check if the request code is same as what is passed  here it is 2  
                   if(requestCode==2)  
                         {  
                            String message=data.getStringExtra("MESSAGE");   
                            textView1.setText(message);  
                         }  
     }  

SecondActivity.java

 public class SecondActivity extends Activity {  
    EditText editText1;  
    Button button1;  
    @Override  
    protected void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.activity_second);  
        editText1=(EditText)findViewById(R.id.editText1);  
            button1=(Button)findViewById(R.id.button1);  
            button1.setOnClickListener(new OnClickListener() {  
                @Override  
                public void onClick(View arg0) {  
                    String message=editText1.getText().toString();  
                    Intent intent=new Intent();  
                    intent.putExtra("MESSAGE",message);  
                    setResult(Activity.RESULT_OK,intent);  
                    finish();//finishing activity  
                }  
            });  
    }  
    @Override  
    public boolean onCreateOptionsMenu(Menu menu) {  
        // Inflate the menu; this adds items to the action bar if it is present.  
        getMenuInflater().inflate(R.menu.second, menu);  
        return true;  
    }  
}  
...