www.91084.com

GVKun编程网logo

Android Activity 之 startActivityForResult 的使用(activity.startactivity)

1

最近很多小伙伴都在问AndroidActivity之startActivityForResult的使用和activity.startactivity这两个问题,那么本篇文章就来给大家详细解答一下,同时

最近很多小伙伴都在问Android Activity 之 startActivityForResult 的使用activity.startactivity这两个问题,那么本篇文章就来给大家详细解答一下,同时本文还将给你拓展'startActivityForResult(android.content.Intent, int)' 已弃用、028 Android startActivityForResult()方法的使用及实例应用(选择QQ头像)、activity A →activity B→ activity C 从C退出时,怎么直接退到A?一般都有什么方法、Android Activity 使用视图绑定扩展基本 Activity等相关知识,下面开始了哦!

本文目录一览:

Android Activity 之 startActivityForResult 的使用(activity.startactivity)

Android Activity 之 startActivityForResult 的使用(activity.startactivity)

 
依次打开Activity  A1--A2--A3--A4 这时候你如果想从第四个返回到第一Activity 的时候,就用到了startActivityForResult 这个方法了。
  1. startActivityForResult(intent, requestCode)
两个参数 一个是第一好的意图对象,另一个是请求代码。

A1 的 intent 定义是
  1. Intent intent = new Intent(); intent.setClass(this,A2.class);
指定一个 int 作为 requestCode 比如 startActivityForResult(intent, 1);

A2 的 intent 定义是
  1. Intent intent = new Intent(); intent.setClass(this,A3.class);
指定一个 int 作为 requestCode 比如 startActivityForResult(intent, 1);

A3 的 intent 定义是
  1. Intent intent = new Intent(); intent.setClass(this,A4.class);
指定一个 int 作为 requestCode 比如 startActivityForResult(intent, 1);

A4 添加一个返回按钮 点击的事件里写
  1. public void 点击事件{
  2.   //this.setResult(int resultCode)
  3.     this.setResult(10)
  4.   this.finish();
  5. }
这时候点击A4的返回按钮时候,先设置 resultCode 给上一个 A3 来判断,然后关闭A4

关闭A4触发A3里面的方法,onActivityResult(int requestCode, int resultCode, Intent data)

在这个方法里面做判断就行了。

前两个参数分别是 我们设置的 requestCode 和 resultCode
  1. protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  2.   // TODO Auto-generated method stub
  3.   super.onActivityResult(requestCode, resultCode, data);
  4.   if(requestCode == 1&& resultCode == 10){
  5.     this.setResult(10);
  6.     this.finish();
  7.   }
  8. }

'startActivityForResult(android.content.Intent, int)' 已弃用

'startActivityForResult(android.content.Intent, int)' 已弃用

如何解决''startActivityForResult(android.content.Intent, int)'' 已弃用

我正在开发一个关于大学应用程序的实习项目,在运行应用程序的这一部分时突然接近。这是我可以将照片上传到图库的部分。我没有收到任何错误,但这里 startActivityForResult(pickImage,REQ);它说像“startActivityForResult(android.content.Intent,int)”作为警告被弃用。

private String category;
private final int REQ= 1;
private Bitmap bitmap;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_upload_image);
    selectimage = findViewById(R.id.addgalleryImage);
    imageCategory = findViewById(R.id.image_category);
    uploadImage = findViewById(R.id.uploadImageBtn);
    galleryImageView = findViewById(R.id.galleryImageView);

    String[] items = new String[]{"Select Category","Convovation","INdependence Day","Other Events"};
    imageCategory.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_spinner_dropdown_item,items));


    imageCategory.setonItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent,View view,int position,long id) {
            category = imageCategory.getSelectedItem().toString();
        }
    });
    selectimage.setonClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

        }
    });
}
private void opengallery(){
    Intent pickImage = new Intent(Intent.ACTION_PICK,MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
    startActivityForResult(pickImage,REQ);
}



@Override
protected void onActivityResult(int requestCode,int resultCode,@Nullable Intent data) {
    super.onActivityResult(requestCode,resultCode,data);
    if (requestCode == REQ && resultCode == RESULT_OK) {
        Uri uri = data.getData();
        try {
            bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(),uri);
        } catch (IOException e) {
            e.printstacktrace();
        }
        galleryImageView.setimageBitmap(bitmap);
    }
}

}

解决方法

如果您想从设备中选取图像,请使用较新的 startActiityForResult() 替代方法,它是 - ActivityResultLauncher

只需按照以下步骤操作:-

  1. 首先像这样创建 ActivityResultLauncher :

     ActivityResultLauncher<String> mGetContent = registerForActivityResult(new 
     GetContent(),new ActivityResultCallback<Uri>() {
         @Override
         public void onActivityResult(Uri uri) {
             // Handle the returned Uri
         }
     });
    
  2. 然后,单击按钮或根据需要启动系统图像选择器。

     @Override
     public void onCreate(@Nullable savedInstanceState: Bundle) {
    
     Button selectButton = findViewById(R.id.select_button);
    
     selectButton.setOnClickListener(new OnClickListener() {
     @Override
     public void onClick(View view) {
         // Pass in the mime type you''d like to allow the user to select
         // as the input
         mGetContent.launch("image/*");
         }
     });
    }
    

如您所见,您没有在任何地方看到 REQUEST_CODE。因此,使用 ActivityResultLauncher,您不必担心检查不同任务的不同请求代码。如果一切正常,ActivityResultLauncher 会为您提供最终结果。

您可以在此处找到更多相关信息:- https://developer.android.com/training/basics/intents/result

028 Android startActivityForResult()方法的使用及实例应用(选择QQ头像)

028 Android startActivityForResult()方法的使用及实例应用(选择QQ头像)

1.startActivityForResult()方法的使用

如果想在Activity中得到新打开Activity 关闭后返回的数据,需要使用系统提供的startActivityForResult(Intent intent, int requestCode)方法打开新的Activity,新的Activity 关闭后会向前面的Activity传回数据,为了得到传回的数据,必须在前面的Activity中重写onActivityResult(int requestCode, int resultCode, Intent data)方法。

2.效果图

点击button,跳转到页面2

选择需要的头像,自动返回

3.XML文件布局

页面1

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal"
    tools:context=".MainActivity">


    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:orientation="vertical">

        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="horizontal">

            <TextView
                android:id="@+id/textView_username"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="用户名" />

            <EditText
                android:id="@+id/editText_username"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:ems="10"
                android:inputType="textPersonName" />
        </LinearLayout>

        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="horizontal">

            <TextView
                android:id="@+id/textView_password"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="密码" />

            <EditText
                android:id="@+id/editText_password"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:ems="10"
                android:inputType="textPassword" />
        </LinearLayout>

        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="horizontal">

            <TextView
                android:id="@+id/textView_confirmpw"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="确认密码" />

            <EditText
                android:id="@+id/editText_confirmpw"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:ems="10"
                android:inputType="textPassword" />


        </LinearLayout>

        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="horizontal">

            <TextView
                android:id="@+id/textView"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="E-mail地址" />

            <EditText
                android:id="@+id/editText"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:ems="10"
                android:inputType="textPersonName" />
        </LinearLayout>


    </LinearLayout>

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:orientation="vertical">

        <ImageView
            android:id="@+id/imageView"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:srcCompat="@mipmap/ic_launcher" />

        <Button
            android:id="@+id/button"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="Button" />
    </LinearLayout>
</LinearLayout>

页面2

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".Page2Activity">
    <GridView
        android:id="@+id/gridview1"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginTop="10dp"
        android:horizontalSpacing="3dp"
        android:verticalSpacing="3dp"
        android:numColumns="4">

    </GridView>

</LinearLayout>

GridView 子项的布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <ImageView
        android:id="@+id/img"
        android:layout_width="88dp"
        android:layout_height="88dp"
        android:src="@mipmap/ic_launcher" />

</LinearLayout>

4.java后台

页面1

package com.lucky.test33activity3;

import android.content.Intent;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;

public class MainActivity extends AppCompatActivity {

    Button button1;
    ImageView imageView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        button1=findViewById(R.id.button);
        imageView=findViewById(R.id.imageView);
        button1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent=new Intent(MainActivity.this,Page2Activity.class);
                startActivityForResult(intent,0x01);
            }
        });
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        if(requestCode==0x01&&resultCode==0x02){
            int id=data.getIntExtra("002",0);
            imageView.setImageResource(id);
        }
        super.onActivityResult(requestCode, resultCode, data);
    }
}

页面2

package com.lucky.test33activity3;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.GridView;
import android.widget.SimpleAdapter;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class Page2Activity extends AppCompatActivity {

    GridView gridView;
    SimpleAdapter simpleAdapter; //简单适配器可以将图片和文件组合起来
    List<Map<String,Object>> list1;
    //Android studio工程将图片转变为的数字
    int[] images={R.mipmap.img01,R.mipmap.img02,R.mipmap.img03,R.mipmap.img04,R.mipmap.img05,R.mipmap.img06,R.mipmap.img07,R.mipmap.img08};
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_page2);
        gridView=findViewById(R.id.gridview1);

        //将图片放入list1中
        list1=new ArrayList<>();  //实例化list1
        for (int i = 0; i <images.length ; i++) {
            Map<String,Object> map=new HashMap<>();  //实例化map
            map.put("001",images[i]);   //给map添加值,参数1为代号,参数2为数据值
            list1.add(map);
        }

        //实例化simpleAdapter,并设置参数,参数2为数据,参数3为子项的布局文件,参数4为数据的代号,参数5为组件的id
        simpleAdapter=new SimpleAdapter(Page2Activity.this,list1,R.layout.itemsimple,new String[]{"001"},new int[]{R.id.img});
        gridView.setAdapter(simpleAdapter); //设置适配器

        //给GridView的列表项添加点击事件
        gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                Intent intent1=new Intent();  //接收intent
                intent1.putExtra("002",images[position]); //放入返回的数据
                setResult(0x02,intent1);
                finish(); //关闭页面
            }
        });
    }
}

5.效果图

activity A →activity B→ activity C 从C退出时,怎么直接退到A?一般都有什么方法

activity A →activity B→ activity C 从C退出时,怎么直接退到A?一般都有什么方法

Android Activity 使用视图绑定扩展基本 Activity

Android Activity 使用视图绑定扩展基本 Activity

如何解决Android Activity 使用视图绑定扩展基本 Activity

我有一个基础活动,其中包括工具栏和导航抽屉。 我所有的活动都扩展了基础活动以设置工具栏标题并使用导航抽屉执行一些操作。

一切正常,但现在我想使用视图绑定,但无法像以前一样显示工具栏和导航抽屉。

这是基本活动xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <androidx.appcompat.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        android:minHeight="?attr/actionBarSize"
        android:background="?attr/colorPrimary"
        app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto" />

    <androidx.drawerlayout.widget.DrawerLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/drawerlayout">

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:textColor="@color/white"
            />

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical">


            <FrameLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:id="@+id/content_frame"/>

        </LinearLayout>

        <!--Second child layout-->
        <com.google.android.material.navigation.NavigationView
            android:id="@+id/navigation_view"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_gravity="start"
            app:headerLayout="@layout/navigation_header"
            app:menu="@menu/navigation_menu">

        </com.google.android.material.navigation.NavigationView>



    </androidx.drawerlayout.widget.DrawerLayout>



</LinearLayout>

这是基本活动

public class BaseActivity extends AppCompatActivity {

DrawerLayout drawerLayout;
ActionBarDrawerToggle actionBarDrawerToggle;
NavigationView navigationView;
Context context;


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

    Toolbar toolbar = findViewById(R.id.toolbar);
    navigationView = findViewById(R.id.navigation_view);
    drawerLayout = findViewById(R.id.drawerlayout);

    context = this;


    actionBarDrawerToggle = new ActionBarDrawerToggle(this,drawerLayout,toolbar,R.string.drawer_open,R.string.drawer_close);

    drawerLayout.addDrawerListener(actionBarDrawerToggle);

   if (navigationView != null) {
       navigationView.setNavigationItemSelectedListener(item -> {
           switch (item.getItemId()) {

               case R.id.logout:
                   logout();
                   break;
               case R.id.home:
                   Intent intent = new Intent (BaseActivity.this,HomeActivity.class);
                   intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
                   startActivity(intent);
                   break;

           }
           return false;
       });
   }

}


public void logout() {
    //perform action ..
}

这里是我如何在其他激活中使用此基础活动

public class HomeActivity extends BaseActivity  {
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

      FrameLayout contentFrameLayout = findViewById(R.id.content_frame); 
      getLayoutInflater().inflate(R.layout.activity_home,contentFrameLayout);
      Toolbar toolbar = findViewById(R.id.toolbar);
      toolbar.setTitle(getResources().getString(R.string.home));
}

这是我在使用视图绑定后所做的

public class HomeActivity extends BaseActivity {
        binding = ActivityHomeBinding.inflate(getLayoutInflater());
        View view = binding.getRoot();
        setContentView(view);
}

我按照下面的方法尝试过,但没有用 Base Activity extending Activity ViewBinding Crash

关于Android Activity 之 startActivityForResult 的使用activity.startactivity的介绍已经告一段落,感谢您的耐心阅读,如果想了解更多关于'startActivityForResult(android.content.Intent, int)' 已弃用、028 Android startActivityForResult()方法的使用及实例应用(选择QQ头像)、activity A →activity B→ activity C 从C退出时,怎么直接退到A?一般都有什么方法、Android Activity 使用视图绑定扩展基本 Activity的相关信息,请在本站寻找。

本文标签: