Análise de atividade dos quatro principais componentes do Android (abaixo)

1. Revisão da atividade

Na análise da atividade dos quatro componentes principais do Android (on) , já falamos sobre o método de inicialização , ciclo de vida e modo de inicialização da atividade . Nesta seção, vamos falar sobre os dois pontos de conhecimento de passagem de parâmetros entre atividades e como iniciar atividades do sistema . A transferência de parâmetros entre atividades inclui o uso de Intent para transferir parâmetros , o uso de Bundle para transferir parâmetros e a transferência de dados complexos .

Dois, transferência de dados entre atividades

2.1, use o Intent para transferir dados

Usar Intent para transferir dados é principalmente para chamar o método Intent.putExtra (). Esse método tem dois parâmetros. O primeiro parâmetro é o nome e o segundo parâmetro é o valor. O tipo de valor é o seguinte:

Método de intenção
O código específico para transferência de dados é o seguinte :

// 1、利用 Intent 传递数据
Intent intent = new Intent(MainActivity.this, SecondActivity.class);
intent.putExtra("str", "Android 开发");  // 传递 String
intent.putExtra("flag", true);
startActivity(intent);

O código transmitido foi escrito, como recebê-lo? Podemos usar o método getIntent () para receber dados em SecondActivity, conforme mostrado abaixo:

TextView params = findViewById(R.id.tv_params);
// 接收数据
String str = getIntent().getStringExtra("str");
// 这里的 false 是默认值的意思,如果没有接收到 flag 的值就是 false
boolean flag = getIntent().getBooleanExtra("flag", false);
if (flag) {
    
    
    params.setText(str);
} else {
    
    
    params.setText("没有接受到数据");
}

Vejamos o efeito:

Transferir dados

2.2. Use o pacote para transferir dados

Usar Bundle para transferir dados é principalmente usar Bundle para armazenar os dados a serem transferidos primeiro e, em seguida, transferir o conjunto de dados Bundle para a Atividade que precisa ser recebida. Vejamos o código transferido:

// 2、利用 Bundle 传递数据
Intent intent = new Intent(MainActivity.this, SecondActivity.class);
Bundle bundle = new Bundle();
bundle.putString("str", "Android 开发");
bundle.putBoolean("flag", true);
intent.putExtra("myBundle", bundle);	
startActivity(intent);

Receber o pacote também é muito simples, precisamos apenas chamar o método getIntent (). GetBundleExtra (). Vejamos o código:

Bundle bundle = getIntent().getBundleExtra("myBundle");
if (bundle != null) {
    
    
    String str = bundle.getString("str");
    boolean flag = bundle.getBoolean("flag");
    if (flag) {
    
    
        params.setText(str);
    } else {
    
    
        params.setText("没有接受到数据");
    }
}

O efeito da passagem de dados de Bundle e de passagem de dados de Intent é exatamente o mesmo, mas a escrita é um pouco diferente.

2.3, a transferência de dados complexos entre atividades

Os dois métodos acima podem passar qualquer tipo básico de dados, mas se você quiser passar dados complexos (como um objeto), o que deve fazer? O Android nos fornece dois métodos para passar tipos complexos de dados:

2.3.1. Implementar a interface Serilziable para as classes que precisam ser aprovadas

Aqui criamos uma classe UserInfo para implementar a interface Serilziable, o código específico é o seguinte:

import java.io.Serializable;

public class UserInfo implements Serializable {
    
    
    public String username;
    public int age;
    public int gender;
}

O código passado é o seguinte:

// 3、复杂类型的数据传递  实现 Serializable 接口
Intent intent = new Intent(MainActivity.this, SecondActivity.class);
UserInfo userInfo = new UserInfo();
userInfo.username = "Bob";
userInfo.age = 25;
userInfo.gender = 1;
intent.putExtra("userInfo", userInfo);
startActivity(intent);

Para receber o objeto Serializable, precisamos chamar o método getIntent (). GetSerializableExtra (), vamos olhar o código:

UserInfo userInfo = (UserInfo) getIntent().getSerializableExtra("userInfo");
if (userInfo != null) {
    
    
    String str = "名字:" + userInfo.username + " " + "年龄:" + userInfo.age + " " + "性别:" +
            (userInfo.gender == 1 ? "男" : "女");
    params.setText(str);
}

Vejamos o efeito:

Dados do objeto

2.3.2, implemente a interface Parceable para as classes que precisam ser aprovadas

Aqui, criamos uma classe Order para implementar a interface Parceable. Precisamos apenas reescrever o método describeContents e o método writeToParcel. O Creator é gerado automaticamente. O código específico é o seguinte:

public class Order implements Parcelable {
    
    

    public String address;
    public boolean isReceived;
    public int count;

    public Order() {
    
    
    }

    protected Order(Parcel in) {
    
    
        address = in.readString();
        isReceived = in.readByte() != 0;
        count = in.readInt();
    }

    public static final Creator<Order> CREATOR = new Creator<Order>() {
    
    
        @Override
        public Order createFromParcel(Parcel in) {
    
    
            return new Order(in);
        }

        @Override
        public Order[] newArray(int size) {
    
    
            return new Order[size];
        }
    };

    @Override
    public int describeContents() {
    
    
        // 只有当对象中存在文件描述符的时候才需要返回 1,通常情况下返回 0 即可
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
    
    
        dest.writeString(address);
        dest.writeBoolean(isReceived);
        dest.writeInt(count);
    }
}

O código passado é o seguinte:

// 4、复杂类型的数据传递  实现 Parcelable 接口
Intent intent = new Intent(MainActivity.this, SecondActivity.class);
Order order = new Order();
order.address = "测试地址";
order.isReceived = true;
order.count = 5;
intent.putExtra("order", order);
startActivity(intent);

Para receber o objeto Parcelable, precisamos chamar o método getIntent (). GetParcelableExtra (), vamos olhar o código:

Order order = getIntent().getParcelableExtra("order");
if (order != null) {
    
    
    String str = "地址:" + order.address + " " + "购买数量:" + order.count + " " + "是否已经确认收货:" +
            (order.isReceived ? "是" : "否");
    params.setText(str);
}

Vejamos o efeito:

Dados complexos

2.4, retorno de dados de atividade

Quando a segunda Activity precisa retornar dados para a primeira Activity, só precisamos iniciar a segunda Activity por meio do método startActivityForResult (). Quando a segunda Activity é fechada, o sistema Android chama de volta a primeira. Método onActivityResult () de Activity, neste método podemos obter alguns dados retornados pela segunda Activity.

O código específico de MainActivity é o seguinte:

public class MainActivity extends AppCompatActivity {
    
    

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    
    
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        findViewById(R.id.btn_start).setOnClickListener(new View.OnClickListener() {
    
    
            @Override
            public void onClick(View v) {
    
    
                // 5、Activity 数据回传
                Intent intent = new Intent(MainActivity.this, SecondActivity.class);
                startActivityForResult(intent, 1000);
            }
        });
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
    
    
        super.onActivityResult(requestCode, resultCode, data);

        String backData = data.getStringExtra("back_data");
        Log.e("MainActivityTag", "requestCode:" + requestCode + " " + "resultCode:" + resultCode + " " +
                "回传的数据:" + backData);
    }
}

O código específico de SecondActivity é o seguinte:

public class SecondActivity extends AppCompatActivity {
    
    

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    
    
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);

        Intent intent = new Intent();
        intent.putExtra("back_data", "回传数据是。。。。。。。。");
        setResult(RESULT_OK, intent);
    }
}

O resultado é o seguinte:

Insira a descrição da imagem aqui

Três, inicie a atividade do sistema

Os componentes de atividade comumente usados ​​no sistema Android incluem fazer chamadas , enviar mensagens de texto e ligar a câmera . Os métodos de inicialização são:

  • intent.setAction (Intent.ACTION_DIAL);
  • intent.setAction (Intent.ACTION_SENDTO)
  • intent.setAction (MediaStore.ACTION_IMAGE_CAPTURE)

O código específico é o seguinte:

  1. número de discagem
    Intent intent = new Intent();
    intent.setAction(Intent.ACTION_DIAL);
    startActivity(intent);
    
  2. enviar mensagens
    Intent intent = new Intent();
    intent.setAction(Intent.ACTION_SENDTO);
    Uri smsToUri = Uri.parse("smsto:" + 10086);
    intent.setData(smsToUri);
    intent.putExtra("sms_body", "短信内容");
    startActivity(intent);
    
  3. ligue uma câmera
    Intent intent = new Intent();
    intent.setAction(MediaStore.ACTION_IMAGE_CAPTURE);
    startActivity(intent);
    

Os efeitos específicos são os seguintes:
Demo

Quatro, resumo

Até agora, falamos sobre os cinco métodos de inicialização , ciclo de vida , quatro modos de inicialização , transferência de dados entre atividades e como iniciar os componentes de atividade do sistema .

Acho que você gosta

Origin blog.csdn.net/weixin_38478780/article/details/108826674
Recomendado
Clasificación