一、实现效果
二、功能说明
主界面有上中下三个结构,包含四个界面:联系人、聊天、发现、我的。从聊天可以点击进入列表页面,点击列表的某一行可以进入详情页面,列表的每一行对应不同的数据,列表可以上下滚动,要用到recycleview。
需要实现以下功能:activity之间的跳转,数据的绑定
三、相关知识点介绍
1、activity
Activity称为活动组件(也称界面程序),它会加载布局文件(属于资源文件)
Activity表现为四种状态:
•活动状态Active:Activity在用户界面中处于最上层,完全能被用户看到,能够与用户进行交互。
•暂停状态Pause:Activity在界面上被部分遮挡,不再处于用户界面的最上层,且不能够与用户进行交互。(如弹出消息框)
•停止状态Stop:Activity被其他Activity全部遮挡,界面完全不能被用户看到。(如玩游戏时来电了)
•非活动状态Dead:Activity没有启动或者被finish()。
Activity和Service都是Context的子类,通过Context提供的方法getApplicationContext()方法就能获到Context对象。Context是一个抽象类且为Activity的超类,提供了startActivity()方法,并以Intent对象作为参数,用于实现窗体之间的跳转。
一个Activity调用另一个Activity时,可以有数据传递,通过Intent对象携带Bundle类型的数据。
2、fragment
Fragment 是片段的意思,在 Android3.0 中引入了 Fragment ,引入的主要目的是为了更好地重用和适应大屏幕的需求。例如现在很多手机和平板都是大尺寸和高分辨率,那么当手机横屏时可能分为左右两栏显示,竖屏时仅仅显示一栏。使用 Fragment 可以方便地实现这种需求。 Fragment 必须被包含在 Activity 中 •OnCreate():当Fragment被创建时调用,一般在此方法中做必要的初始化工作。• OnCreateView (): 当 Fragment 显示界面时回调此方法,返回显示的 View3、recycleview
• RecyclerView 是 Android 5.0 推出的,是 support-v7 包中的新组件 , 它被用来代替 ListView 和 GridView ,并且能够实现瀑布流的布局,更加高级并且更加灵活,提供更为高效的回收复用机制,同时实现管理与视图的解耦合。四、实现过程及代码
1、布局文件
实现recycleview
<?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:id="@+id/main"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".adapterActivity">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recycleView"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="8dp"
android:layout_marginBottom="8dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="1.0" />
</androidx.constraintlayout.widget.ConstraintLayout>
</LinearLayout>
实现主界面ui
include写好的layout_top.xml和layout_bottom文件,采用vertical,中间留白,因为fragment里面会传参,以免覆盖
<?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="wrap_content">
<TextView
android:id="@+id/textView_top"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="我的微信"
android:textAlignment="center"
android:textColor="#FFEB3B"
android:textSize="48sp" />
</LinearLayout>
<?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="100dp"
android:orientation="horizontal">
<LinearLayout
android:id="@+id/bottom_linearlayout1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:orientation="vertical">
<ImageView
android:id="@+id/imageView1"
android:layout_width="wrap_content"
android:layout_height="60dp"
tools:srcCompat="@drawable/p1" />
<TextView
android:id="@+id/textView_bottom1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:text="联系人"
android:textAlignment="center"
android:textSize="24sp" />
</LinearLayout>
<LinearLayout
android:id="@+id/bottom_linearlayout2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:orientation="vertical">
<ImageView
android:id="@+id/imageView2"
android:layout_width="wrap_content"
android:layout_height="60dp"
tools:srcCompat="@drawable/p1" />
<TextView
android:id="@+id/textView_bottom2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:text="聊天"
android:textAlignment="center"
android:textSize="24sp" />
</LinearLayout>
<LinearLayout
android:id="@+id/bottom_linearlayout3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:orientation="vertical">
<ImageView
android:id="@+id/imageView3"
android:layout_width="wrap_content"
android:layout_height="60dp"
tools:srcCompat="@drawable/p1" />
<TextView
android:id="@+id/textView_bottom3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:text="发现"
android:textAlignment="center"
android:textSize="24sp" />
</LinearLayout>
<LinearLayout
android:id="@+id/bottom_linearlayout4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:orientation="vertical">
<ImageView
android:id="@+id/imageView4"
android:layout_width="wrap_content"
android:layout_height="60dp"
tools:srcCompat="@drawable/p1" />
<TextView
android:id="@+id/textView_bottom4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:text="我的"
android:textAlignment="center"
android:textSize="24sp" />
</LinearLayout>
</LinearLayout>
实现fragment
2、fragment
每个Fragment都需要重写如下两个方法:OnCreate(),OnCreateView()
以fragment1为例
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (getArguments() != null) {
mParam1 = getArguments().getString(ARG_PARAM1);
mParam2 = getArguments().getString(ARG_PARAM2);
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_layout1, container, false);
}
fragment2中有可滚动的列表,这里用recycleview来实现
用Map存储键值对,来对应列表中每行不同的数据
使用ServiceConnection来实现绑定
ServiceConnection
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view=inflater.inflate(R.layout.activity_adapter, container, false);
Context context=getContext();
recyclerView=view.findViewById(R.id.recycleView);
int[] phonename={R.drawable.p_1, R.drawable.p_2, R.drawable.p_3};
String[]price={"1000","2000","3000"};
String[]config={"ssss","qqqq","rrrr"};
List<Map<String, Object>> list1=new ArrayList<Map<String, Object>>();
for(int i=0;i<phonename.length;i++){
Map<String, Object> map=new HashMap<>();
map.put("name",phonename[i]);
map.put("price",price[i]);
map.put("config",config[i]);
list1.add(map);
}
adapter adapter0=new com.example.myapplication.adapter(context,list1);
recyclerView.setAdapter(adapter0);
LinearLayoutManager manager = new LinearLayoutManager(context);
manager.setOrientation(LinearLayoutManager.VERTICAL);
recyclerView.setLayoutManager(manager);
Intent intent=new Intent(context, MyService.class);
//context.startService(intent);
ServiceConnection connection=new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName componentName, IBinder iBinder) {
mybinder=(MyService.Mybinder) iBinder;
mybinder.todo();
}
@Override
public void onServiceDisconnected(ComponentName componentName) {
mybinder=null;
}
};
context.bindService(intent,connection,Context.BIND_AUTO_CREATE);
//context.unbindService(connection);
return view;
}
3、activity
用以下函数实现点击效果
setOnClickListener
由于版本的问题,没有采用switch语句而是使用if else来选择fragment
@Override
public void onClick(View view) {
int id = view.getId();
if (id == R.id.bottom_linearlayout1) {
showfragment(fragment1);
} else if (id == R.id.bottom_linearlayout2) {
showfragment(fragment2);
} else if (id == R.id.bottom_linearlayout3) {
showfragment(fragment3);
} else if (id == R.id.bottom_linearlayout4) {
showfragment(fragment4);
}
}
标签:layout,框架,fragment,Fragment,开发技术,context,Activity,id,搭建
From: https://blog.csdn.net/2301_78836301/article/details/143849062