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。