这次实验主要是理解Activity,实现:新建一个新的activity1,recycleview的某一项点击后跳转到这个新的activity1。如:点击新闻列表会跳转到新闻详情页面;实现最新的activityforresult功能,具体要求如下:新建一个新的activity2,在activity1上添加按钮可收到activity2的回传值。如:新闻详情页面中点击收藏按钮可显示当前的收藏数量为N。
这次试验我还是在之前的项目上搭建的,并且这次更新也push到了这个仓库:https://github.com/DobyAsa/RechatV2.git
这一次我新建了两个activity,一个是当用户点击列表中的item之后跳转的ItemActivity,在这个activity中,我们将用来显示将来会拿到的数据。另一个是专门用来返回数据的工具activity,这个activity负责返回上一个activity所需要的数据。
其中ItemActivity的布局为:
1 <?xml version="1.0" encoding="utf-8"?> 2 <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 xmlns:app="http://schemas.android.com/apk/res-auto" 4 xmlns:tools="http://schemas.android.com/tools" 5 android:layout_width="match_parent" 6 android:layout_height="match_parent" 7 tools:context=".ItemAcitivity"> 8 9 <Button 10 android:id="@+id/infoButton" 11 android:layout_width="wrap_content" 12 android:layout_height="wrap_content" 13 android:text="@string/info_button" 14 app:layout_constraintBottom_toBottomOf="parent" 15 app:layout_constraintEnd_toEndOf="parent" 16 app:layout_constraintStart_toStartOf="parent" 17 app:layout_constraintTop_toTopOf="parent" 18 app:layout_constraintVertical_bias="0.53" /> 19 20 <TextView 21 android:id="@+id/infoView" 22 android:layout_width="wrap_content" 23 android:layout_height="wrap_content" 24 android:paddingLeft="32dp" 25 android:paddingEnd="32dp" 26 app:layout_constraintBottom_toTopOf="@+id/infoButton" 27 app:layout_constraintEnd_toEndOf="parent" 28 app:layout_constraintStart_toStartOf="parent" 29 app:layout_constraintTop_toTopOf="parent" /> 30 </androidx.constraintlayout.widget.ConstraintLayout>
相应的,我的Activity的代码为:
1 package com.example.rechatv2; 2 3 import androidx.activity.result.ActivityResult; 4 import androidx.activity.result.ActivityResultCallback; 5 import androidx.activity.result.ActivityResultLauncher; 6 import androidx.activity.result.contract.ActivityResultContracts; 7 import androidx.appcompat.app.AppCompatActivity; 8 9 import android.content.ClipData; 10 import android.content.Intent; 11 import android.os.Bundle; 12 import android.util.Log; 13 import android.view.View; 14 import android.widget.Button; 15 import android.widget.TextView; 16 17 public class ItemAcitivity extends AppCompatActivity { 18 private Button mInfoButton; 19 private TextView mInfoView; 20 21 @Override 22 protected void onCreate(Bundle savedInstanceState) { 23 super.onCreate(savedInstanceState); 24 setContentView(R.layout.activity_item); 25 26 mInfoButton = findViewById(R.id.infoButton); 27 mInfoView = findViewById(R.id.infoView); 28 29 mInfoButton.setOnClickListener(new View.OnClickListener() { 30 @Override 31 public void onClick(View view) { 32 Intent intent = new Intent(ItemAcitivity.this, ResultActivity.class); 33 test.launch(intent); 34 } 35 }); 36 } 37 public ActivityResultLauncher test; 38 { 39 test = registerForActivityResult( 40 new ActivityResultContracts.StartActivityForResult(), 41 new ActivityResultCallback<ActivityResult>() { 42 43 @Override 44 public void onActivityResult(ActivityResult result) { 45 if(result.getResultCode() == 1024){ 46 Log.d("xr", "onActivityResultLauncher..."); 47 mInfoView.setText(result.getData().getStringExtra("Info")); 48 } 49 } 50 }); 51 } 52 }
我的ResultActivity的布局是空的,因为在这次实验中其实也用不到他。主要是用代码
package com.example.rechatv2; import androidx.appcompat.app.AppCompatActivity; import android.content.Intent; import android.os.Bundle; import java.util.Calendar; public class ResultActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_result); Intent intent = getIntent(); intent.putExtra("Info", "现在我在写实验,我的老师是肖蓉。"+"现在时间是: "+ Calendar.getInstance().getTime()); setResult(1024, intent); finish(); } }
然后我们也要给每个item都加上一个点击事件:
public void onBindViewHolder(@NonNull ChatViewHolder holder, int position) { holder.getChatAvatar().setImageDrawable(localDataset[0].getAvatar()); holder.getChatName().setText(localDataset[0].getName()); holder.getLastChatTime().setText(localDataset[0].getLastChatTime()); holder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent intent = new Intent(context, ItemAcitivity.class); context.startActivity(intent); } }); }
OK,到现在为止,我们的功能已经实现完成。下图是演示,“曾浩”是我的一个同学,OK,我们点击他。
我们就进入到ItemActivity的界面。继续点击get information
完成。
标签:生命周期,activity,Intent,result,Activity,import,android,跳转,public From: https://www.cnblogs.com/dobyasa/p/16814645.html