一、目标功能
请根据APP门户界面设计的源码基础,在列表页上点击跳转到另一详情页面
二、实现思路
1. 创建目标界面:首先创建一个Activity作为目标界面。
2. 设置RecyclerView:在目标界面的布局文件中定义一个RecyclerView,
3. 准备数据源:在目标界面中,准备用于显示在RecyclerView中的数据集合。
4. 绑定数据:在Adapter中实现数据与RecyclerView的绑定逻辑。创建一个继承自RecyclerView.Adapter的适配器类,并在其中实现相应的方法
5. 跳转到目标界面:在源界面中点击来跳转到目标界面。
三、代码文件
1、布局文件
activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout 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=".MainActivity"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <include layout="@layout/top" /> <FrameLayout android:id="@+id/id_content" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1"> </FrameLayout> <include layout="@layout/bottom" /> </LinearLayout> </androidx.constraintlayout.widget.ConstraintLayout>
item.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="50dp" xmlns:tools="http://schemas.android.com/tools" android:layout_margin="8dp" android:background="@drawable/common_bg" android:orientation="vertical"> <TextView android:id="@+id/textView1" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_centerVertical="true" android:layout_marginLeft="8dp" android:gravity="center" android:text="TextView" /> </LinearLayout>
activity_main2.xml
<?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:gravity="center" android:orientation="vertical" tools:context=".MainActivity2"> <TextView android:id="@+id/textView7" android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center" android:text="这是第一个activity" android:textSize="40sp" /> </LinearLayout>
activity_main3.xml
<?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=".MainActivity3"> <TextView android:id="@+id/textView5" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:text="新闻详情" android:textSize="40dp" /> </LinearLayout>
2、Java文件
MainActivity2.java
package com.example.myapplication; import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; import androidx.recyclerview.widget.RecyclerView; import android.content.Intent; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; public class MainActivity2 extends AppCompatActivity { private Button button1; private Button button2; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main2); } @Override protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { super.onActivityResult(requestCode, resultCode, data); if (resultCode == 31) { String state = data.getStringExtra("state"); Log.d("life", state); } } @Override protected void onStart() { super.onStart(); Log.d("life", "activity1 is onStart..."); } @Override protected void onPostResume() { super.onPostResume(); Log.d("life", "activity1 is onPostResume..."); } @Override protected void onRestart() { super.onRestart(); Log.d("life", "activity1 is onReStart..."); } @Override protected void onPause() { super.onPause(); Log.d("life", "activity1 is onPause..."); } @Override protected void onStop() { super.onStop(); Log.d("life", "activity1 is onStop..."); } @Override protected void onDestroy() { super.onDestroy(); Log.d("life", "activity1 is onDestroy..."); } @Override public void finish() { super.finish(); Log.d("life", "activity1 is finish..."); } @Override public void finishActivity(int requestCode) { super.finishActivity(requestCode); Log.d("life", "activity1 is finishActivity..."); } }
MainActivity3.java
package com.example.myapplication; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; public class MainActivity3 extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main3); } @Override protected void onPostResume() { super.onPostResume(); Log.d("life", "activity2 is onPostResume..."); } @Override protected void onStart() { super.onStart(); Log.d("life", "activity2 is onStart..."); } @Override protected void onRestart() { super.onRestart(); Log.d("life", "activity2 is onReStart..."); } @Override protected void onStop() { super.onStop(); Log.d("life", "activity2 is onStop..."); } @Override protected void onDestroy() { super.onDestroy(); Log.d("life", "activity2 is onDestroy..."); } @Override protected void onPause() { super.onPause(); Log.d("life", "activity2 is onPause..."); } @Override public void finish() { super.finish(); Log.d("life", "activity2 is finish..."); } @Override public void finishActivity(int requestCode) { super.finishActivity(requestCode); Log.d("life", "activity2 is finishActivity..."); } }
contactFragment.java
package com.example.myapplication; import android.content.Context; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.app.Fragment; import com.example.myapplication.Myadapter; import androidx.annotation.Nullable; import androidx.recyclerview.widget.ItemTouchHelper; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; import java.util.ArrayList; import java.util.List; public class contactFragment extends Fragment { private RecyclerView recyclerView; private Myadapter myadapter; private List<String> list = new ArrayList<>(); private Context context; public contactFragment() { // Required empty public constructor } private void initData() { for (int i = 0; i < 30; i++) { list.add("最新新闻" + i); } } private void initView3() { context = this.getActivity(); myadapter = new Myadapter(list, context); LinearLayoutManager manager3 = new LinearLayoutManager(context); manager3.setOrientation(LinearLayoutManager.VERTICAL); recyclerView.setAdapter(myadapter); recyclerView.setLayoutManager(manager3); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment // return inflater.inflate(R.layout.contact, container, false); View view = inflater.inflate(R.layout.contact, container, false); recyclerView = view.findViewById(R.id.recycleview); initData(); initView3(); return view; } }
Myadapter.java
package com.example.myapplication; import android.content.Context; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import androidx.annotation.NonNull; import androidx.recyclerview.widget.RecyclerView; import java.util.ArrayList; import java.util.List; public class contact_adapter extends RecyclerView.Adapter<contact_adapter.VerticalViewHolder>{ private static final String Tag = contact_adapter.class.getSimpleName(); private Context myContext; private List<String> mylist = new ArrayList<>(); public contact_adapter(Context context) { myContext = context; } public void setVerticalDataList(List<String> list) { Log.d(Tag, "setVerticalDataList: " + list.size()); mylist = list; notifyDataSetChanged(); } @NonNull @Override public VerticalViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { View view = LayoutInflater.from(myContext).inflate(R.layout.item3, parent, false); return new VerticalViewHolder(view); } @Override public void onBindViewHolder(@NonNull VerticalViewHolder holder, int position) { holder.teamNum.setText(position + 1 + ""); holder.teamContent.setText(mylist.get(position)); } @Override public int getItemCount() { return mylist == null ? 0 : mylist.size(); } public class VerticalViewHolder extends RecyclerView.ViewHolder { TextView teamNum, teamContent; public VerticalViewHolder(View itemView) { super(itemView); teamNum = itemView.findViewById(R.id.team_num); teamContent = itemView.findViewById(R.id.team_content); } } }
三、实验总结
在本次实验中,我们通过在类微信界面中添加RecycleView,并为其添加了点击跳转功能,深入了解了Activity的生命周期和状态转变操作。通过正确管理Activity的生命周期,我们可以合理地处理Activity的创建、启动、暂停、恢复和销毁等过程,确保应用程序的正常运行和用户体验。
通过实现RecycleView的点击跳转功能,我们还学会了如何在不同的Activity之间传递和交互数据。这可以帮助我们构建更灵活、交互性更强的应用程序,提升用户体验和功能扩展性。
在实验过程中,我们不仅理解了Activity的基本概念和原理,还掌握了一些具体的操作技巧。同时,通过深入了解Android系统的架构和组件,我们可以更好地开发高质量的Android应用程序。
通过这次实验,我们对Android开发有了更深入的了解,同时也增加了实际操作的经验。这对于我们今后的Android开发工作具有重要的指导作用,帮助我们更好地应对实际项目需求,提供更优秀的应用程序