Продолжаем изучать обмен данными между экранами android приложения. В этом уроке создаем android приложение, которое будет вызывать два разных Activity и получать от них данные. Как мы помним, результат приходит в метод onActivityResult. И requestCode используется, чтобы отличать друг от друга пришедшие результаты. А resultCode – позволяет определить, успешно прошел вызов или нет.
Исходный код классов из урока — под видео:
[pastacode lang=»css» message=»activity_main.xml» highlight=»» provider=»manual»]
[/pastacode]
[pastacode lang=»java» message=»MainActivity.java» highlight=»» provider=»manual»]
package info.fandroid.activityresult;
import android.content.Intent;
import android.graphics.Color;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.Gravity;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
final int REQUEST_CODE_COLOR = 1;
final int REQUEST_CODE_ALIGN = 2;
TextView tvText;
Button btnColor;
Button btnAlign;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tvText = (TextView)findViewById(R.id.tvText);
btnColor = (Button)findViewById(R.id.btnColor);
btnAlign = (Button)findViewById(R.id.btnAlign);
btnAlign.setOnClickListener(this);
btnColor.setOnClickListener(this);
}
@Override
public void onClick(View v) {
Intent intent;
switch (v.getId()){
case R.id.btnColor:
intent = new Intent(this, ColorActivity.class);
startActivityForResult(intent, REQUEST_CODE_COLOR);
break;
case R.id.btnAlign:
intent = new Intent(this, AlignActivity.class);
startActivityForResult(intent, REQUEST_CODE_ALIGN);
break;
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Log.d("myLogs", "requestCode = " + requestCode + ", resultCode = " + resultCode);
if (resultCode == RESULT_OK){
switch (requestCode){
case REQUEST_CODE_COLOR:
int color = data.getIntExtra("color", Color.WHITE);
tvText.setTextColor(color);
break;
case REQUEST_CODE_ALIGN:
int align = data.getIntExtra("alignment", Gravity.LEFT);
tvText.setGravity(align);
break;
}
} else {
Toast.makeText(MainActivity.this, "Wrong result", Toast.LENGTH_SHORT).show();
}
}
}
[/pastacode]
[pastacode lang=»css» message=»activity_color.xml» highlight=»» provider=»manual»]
[/pastacode]
[pastacode lang=»java» message=»ColorActivity.java» highlight=»» provider=»manual»]
package info.fandroid.activityresult;
import android.content.Intent;
import android.graphics.Color;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class ColorActivity extends AppCompatActivity implements View.OnClickListener{
Button btnRed;
Button btnGreen;
Button btnBlue;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_color);
btnRed = (Button)findViewById(R.id.btnRed);
btnGreen = (Button)findViewById(R.id.btnGreen);
btnBlue = (Button)findViewById(R.id.btnBlue);
btnRed.setOnClickListener(this);
btnGreen.setOnClickListener(this);
btnBlue.setOnClickListener(this);
}
@Override
public void onClick(View v) {
Intent intent = new Intent();
switch (v.getId()){
case R.id.btnRed:
intent.putExtra("color", Color.RED);
break;
case R.id.btnGreen:
intent.putExtra("color", Color.GREEN);
break;
case R.id.btnBlue:
intent.putExtra("color", Color.BLUE);
break;
}
setResult(RESULT_OK, intent);
finish();
}
}
[/pastacode]
[pastacode lang=»css» message=»activity_align.xml» highlight=»» provider=»manual»]
[/pastacode]
[pastacode lang=»java» message=»AlignActivity.java» highlight=»» provider=»manual»]
package info.fandroid.activityresult;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Gravity;
import android.view.View;
import android.widget.Button;
public class AlignActivity extends AppCompatActivity implements View.OnClickListener{
Button btnLeft;
Button btnCenter;
Button btnRight;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_align);
btnLeft = (Button)findViewById(R.id.btnLeft);
btnCenter = (Button)findViewById(R.id.btnCenter);
btnRight = (Button)findViewById(R.id.btnRight);
btnLeft.setOnClickListener(this);
btnCenter.setOnClickListener(this);
btnRight.setOnClickListener(this);
}
@Override
public void onClick(View v) {
Intent intent = new Intent();
switch (v.getId()){
case R.id.btnLeft:
intent.putExtra("alignment", Gravity.LEFT);
break;
case R.id.btnCenter:
intent.putExtra("alignment", Gravity.CENTER);
break;
case R.id.btnRight:
intent.putExtra("alignment", Gravity.RIGHT);
break;
}
setResult(RESULT_OK, intent);
finish();
}
}
[/pastacode]
Больше уроков:
Инструменты android разработчика: тут
Дизайн android приложений: тут
Уроки создания игр для android: тут
Основы программирования на JAVA: тут
<<Урок 29. Вызов второго Activity с возвращением данных | Уроки Android Studio
Урок 31. Вызываем браузер, звонилку, карты с помощью intent с атрибутом data — Uri >>