Android工程搭建
EventBus和Otto第三方框架
EventBus
EventBus介绍:
1.EventBus能够简化各组件间的通信,让我们的代码书写变得简单,能有效的分离事件发送方和接收方
Event三大要素
1.Event 事件。它可以是任意类型。
2.Subscriber 事件订阅者。
3.Publisher 事件的发布者。我们可以在任意线程里发布事件,一般情况下,使用EventBus.getDefault()就4.可以得到一个EventBus对象,然后再调用post(Object)方法即可。
代码案例
public class MainActivity extends AppCompatActivity {
Button btn_event;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn_event=findViewById(R.id.btn_event);
btn_event.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
EventBus.getDefault().post(new EventType("rex",19));
}
});
EventBus.getDefault().register(this);
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void jie(EventType eventtype){
Toast.makeText(this, "姓名:"+eventtype.getName()+"年龄:"+eventtype.getAge(), Toast.LENGTH_SHORT).show();
}
@Override
protected void onDestroy() {
EventBus.getDefault().unregister(this);
super.onDestroy();
}
}
添加依赖
implementation ‘org.greenrobot:eventbus:3.1.1’
2.定义消失事件类
package com.example.day11_eventbbus;
public class EventType {
private String name;
private int age;
public EventType(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
public void setName(String name) {
this.name = name;
}
public void setAge(int age) {
this.age = age;
}
}
注意:订阅者的方法必须被public修饰
Otto第三方框架
1, 导入依赖 implementation 'com.squareup:otto:1.3.8'
2, 定义一个类 AppBus, 继承Bus , ---- 单例模式 , 返回Bus 的子类对象
3, 注册到Bus 的主线程中
AppBus.getInstance().register(this);
4, 在onDestry() 方法中取消注册
@Override
protected void onDestroy() {
super.onDestroy();
AppBus.getInstance().unregister(this);
}
5, 声明订阅者
@Subscribe
public void receiveMessage(String result)
{
Toast.makeText(this, "result = " + result, Toast.LENGTH_SHORT).show();
}
6, 发起订阅 -- 主线程中
AppBus.getInstance().post("OTTO 返回的数据");
Fragment介绍
Fragment,英文碎片的意思,早期应用在平板设计中
如何实现Fragment
(1).定义一个类, 继承Fragment
(2).重写父类的方法onCreateView()
(3).在onCreateView()方法中, 为Fragment 创建UI界面
public class Main3Activity extends AppCompatActivity {
RadioButton rb1,rb2,rb3;
F1 f1;
F2 f2;
F3 f3;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main3);
rb1=findViewById(R.id.btn1);
rb2=findViewById(R.id.btn2);
rb3=findViewById(R.id.btn3);
f1 = new F1();
f2 = new F2();
f3 = new F3();
getSupportFragmentManager().beginTransaction().add(R.id.framer,f1).commit();
rb1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
getSupportFragmentManager().beginTransaction().replace(R.id.framer,f1).commit();
}
});
rb2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
getSupportFragmentManager().beginTransaction().replace(R.id.framer,f2).commit();
}
});
rb3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
getSupportFragmentManager().beginTransaction().replace(R.id.framer,f3).commit();
}
});
}
}
public class F1 extends Fragment {
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View inflate = inflater.inflate(R.layout.f1, null);
return inflate;
}
}
多布局实现QQ页面
public class Base extends BaseAdapter {
MainActivity mt;
ArrayList<mes> list;
public Base(MainActivity mt, ArrayList<mes> list) {
this.mt = mt;
this.list = list;
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public int getItemViewType(int position) {
boolean flag = list.get(position).getFlag();
if(flag){
return 0;
}else{
return 1;
}
}
@Override
public int getViewTypeCount() {
return 2;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
viewHolder viewHolder;
if(convertView==null){
viewHolder = new viewHolder();
if(getItemViewType(position)==0){
convertView= LayoutInflater.from(mt).inflate(R.layout.layout1,null);
}else{
convertView= LayoutInflater.from(mt).inflate(R.layout.layout2,null);
}
viewHolder.tv=convertView.findViewById(R.id.tv);
convertView.setTag(viewHolder);
}else{
viewHolder= (Base.viewHolder) convertView.getTag();
}
mes mes = list.get(position);
viewHolder.tv.setText(mes.getMessage()+"");
return convertView;
}
class viewHolder{
TextView tv;
}
}