简单Fagment和EventBus和qq多布局

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;

    }
}

猜你喜欢

转载自blog.csdn.net/weixin_43841463/article/details/92847203