Android——动态广播、静态广播

1. 先建三个静态页面

2、然后实现点击按钮跳转

Button button = (Button) findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v){
            //Intent是一种运行时绑定(run-time binding)机制,它能在程序运行过程中连接两个不同的组件。 
            //在存放资源代码的文件夹下下, 
            Intent i = new Intent(MainActivity.this , StaticActivity.class);
             //启动 
            startActivity(i);
           }
        });
android:onClick="onClick"

3、更改静态注册页面的列表内容

ListView的功能:
1.将数据填充到布局;
2.处理用户的选择点击等操作。

列表的显示需要三个元素:
1.ListVeiw:用来展示列表的View;
2.适配器: 用来把数据映射到ListView上的中介;
3.数据源: 具体的将被映射的字符串,图片,或者基本组件。

关于适配器
适配器是一个连接数据和AdapterView的桥梁,通过它能有效地实现数据与AdapterView的分离设置,
使AdapterView与数据的绑定更加简便,修改更加方便。将数据源的数据适配到ListView中的常用适配器有:
ArrayAdapter、SimpleAdapter 和 SimpleCursorAdapter。

常用数据适配器(Adapter )
– 在使用ListView时需要对其进行数据适配。为了实现这个功能,Android系统提供一系列的适配器(Adapter)对ListView进行数据适配。– 适配器就像显示器,把复杂的数据按人们易于接受的方式来展示。
BaseAdapter : 即基本的适配器。它实际上就是一个抽象类,该类拥有四个抽象方法。在Android开发中,就是根据这几个抽象方法来对
ListView进行数据适配的

SimpleAdapter: SimpleAdapter继承自BaseAdapter,实现了BaseAdapter的四个抽象方法,分别是getCount()、getItem()、getItemId()、getView()方法。

ArrayAdapter: ArrayAdapter也继承自BaseAdapter,与SimpleAdapter相同。ArrayAdapter通常用于适配TextView控件,例如Android系统中的设置菜单(Setting)。

package com.example.lenovo.broadcast;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;

public class StaticActivity extends AppCompatActivity {

    private String[] data={"Banana","Cherry","coco","kiwi","Orange","Pear","Strawberry","Watermelon"};
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_static);

        ArrayAdapter<String> adapter=new ArrayAdapter<String>(StaticActivity.this,android.R.layout.simple_list_item_1,data);
        ListView listview=(ListView)findViewById(R.id.listView);
        listview.setAdapter(adapter);
    }
}
构建Intent,使用sendBroadcast方法发出广播定义一个广播接收器,
该广播接收器继承BroadcastReceiver,
并且覆盖onReceive()方法来响应事件注册该广播接收器,
我们可以在代码中注册(动态注册),
也可以AndroidManifest.xml配置文件中注册(静态注册)。

4、实现静态注册功能

MyReceiver.java文件

kage com.example.lenovo.broadcast;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.view.Gravity;
import android.widget.Toast;

public class MyReceiver extends BroadcastReceiver {
    public MyReceiver() {
    }

    @Override
    public void onReceive(Context context, Intent intent) {
        Toast t = Toast.makeText(context,"静态广播:"+intent.getStringExtra("info"), Toast.LENGTH_SHORT);
        t.setGravity(Gravity.TOP,0,0);
        t.show();
    }
}

修改AndroidMainfest.xml配置文件

    <uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS"/>

<receiver
            android:name=".MyReceiver"
            android:enabled="true"
            android:exported="true">
            <intent-filter>
                //自定义Action
                <action android:name="Pandora" />
            </intent-filter>
        </receiver>

5、实现动态注册功能

6、点击动态注册 中的按钮 点击后按钮text发生改变

使用Android studio过程中发现的几个解决R变红的办法:
 1.new一个activity之后:

新建一个活动的时候,Android studio会需要一点时间将这个活动创建出来,这个期间底部会有一个进度条,在这个进度条跑完之前,如果进行代码操作的话,极有可能触发R标红这样的情况;

2.更改xml布局文件之后:

xml文件编写软件界面的文件,跟逻辑代码密切相关,如果改动xml里面的代码,很有可能会使逻辑里面的代码报错,这里的报错情况就可能多种多样了,也包括使R标红的情况。

3.还有时候把项目关了重新打开也会标红…

有时候这也是由于电脑性能不足,运行一个项目需要较长的时间,而这期间如果不小心进行了一些代码改动,就有可能引发R标红。

一些解决办法:

1.重启软件;

2.将标红的R删除重新打一个(我觉得是不是Android studio软件本身有一点问题,好几次把R删掉重新敲一个上去就不报错了。。。);

3.根据提示查找代码错误,有时是真的代码有错误;

4.强制运行项目,有时一次不行运行两次就不报错了;

空指针异常:

java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ListView.setAdapter(android.widget.ListAdapter)' on a null object reference

·当在Activity里面使用setContentView的时候,同时又定义了一些其他布局中的按钮,在使用的时候,可能会引发空指针异常。
在定义控件 的时候,可能需要赋值,但是没赋值,也就是仔细检查所定义的每个控件。

·在粘贴别人的代码的时候,有的时候把布局和逻辑代码一起粘贴过来了,但是在引用R文件的时候,并不是自己布局里的id,而是别的项目里的,也就是说引用不在本项目中。

·所定义的字符串初始化没有赋值。

·接口类型c的对象没有用具体的类初始化,比如: List lt;会报错 List lt = new ArrayList();则不会报错了。

·当用到Bundle的时候,可能没有和指定的Intent 进行绑定,而在另一个Activity里面却接收数据,就会引发空指针异常了。

 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_static);

R.layout. 后面的页面写错了,应该写静态xml而不是main.xml。

猜你喜欢

转载自blog.csdn.net/Pandora_417/article/details/90813827
今日推荐