A

Android开发笔记

Xiaoma 学习记录程序设计 2021-01-24

常用基本控件

Activity

用户所看到的界面可以理解为一个Activity,设置Activity布局的伪代码如下:

setContentView(Layout)
T example = (T)findViewById(R.id.xxx)

在主程序中,主要有以下重载的函数:

onCreate()
onStart()
·········
onStop()
onDestroy()
startActivity(Intent)
startActivityForResult(Intent,0)+onActivityResult方法重载

被主程序启动的Aty基本和主程序一样,如果主程序使用了startActivityForResult,该Aty中可以用setResult(0,Intent)来返回结果

Service

Service可以理解为用户看不见的Activity

主程序:
startService(Intent)+onServiceConnected方法重载
bindService(Intent,Context,Content.BIND_AUTO_CREATE)
服务程序:
onBind(Intent)  //被绑定了后执行(一般来说,启动服务的同时会自动绑定)

Broadcast Receiver

用于接收广播事件,如主程序执行sendBroadcast后,receiver会执行Onreceive函数

ContentProvider

为不同应用之间共享数据提供的接口,如访问并读取联系人:

Cursor c = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI,null,null,null,null,null);
        while(c.moveToNext()){
            String info = c.getString(c.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
            System.out.println(">>>>"+info);
        }

Intent

用于启动连接各种控件的基本单位,可以附带数据,例如

Intent i = new Intent(this,target.class);
//i.putExtra("text","Hello target!"); //第一个参数为数据的名字,第二个是数据的内容
Bundle data = new Bundle();   //更大的存放数据的结构
data.putString("text","Hello target!");
i.putExtras(data);   //注意有个 s
startActivity(i);   //启动Activity

同时,取数据的操作如下:

Intent i = getIntent();
//String data = i.getStringExtra("text");  //根据数据名来取得数据内容
Bundle data = i.getExtras();
String txt = data.getString("text");

ListView

列表View,配合Adapter使用

lv = (ListView) findViewById(R.id.xxx);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1);  //listView的每一个View都是一个简单的String
lv.setadapter(adapter);

适配器除了使用自带的以外,可以自定义

public class CustomListViewAdapter extends BaseAdapter {
    private Context context;
    private CustomListCellData[] data = new CustomListCellData[]{
            new CustomListCellData("Hello1","h1",R.drawable.img1),
            new CustomListCellData("Hello2","h2",R.drawable.img2)
    };
    public CustomListViewAdapter(Context context){
        this.context=context;
    }
    @Override
    public int getCount() {
            return data.length;
        }
    @Override
    public CustomListCellData getItem(int i) {
        return data[i];
    }
    @Override
    public long getItemId(int i) {
        return i;
    }
    @Override
    public View getView(int i, View view, ViewGroup viewGroup) {
    /*    TextView tv=null;
        if(view!=null){
            tv = (TextView) view;
        }else{
            tv = new TextView(CustomListView.this);
        }
        tv.setTextSize(20);
        tv.setText(getItem(i));
        return tv;*/
        LinearLayout ll=null;
        if(view!=null){
            ll=(LinearLayout) view;
        }else{
            ll= (LinearLayout) LayoutInflater.from(this.context).inflate(R.layout.customlistcell,null);
        }
        CustomListCellData data = getItem(i);
        ImageView icon = ll.findViewById(R.id.icon);
        TextView name = (TextView) ll.findViewById(R.id.name);
        TextView dec = (TextView) ll.findViewById(R.id.dec);
        icon.setImageResource(data.getIconId());
        name.setText(data.getName());
        dec.setText(data.getDec());
        return ll;
    }
}

其中列表中的每个View的内容就是根据getView函数返回的内容而定的,getCount函数很重要,适配器需要根据这个函数来确定读取View的数量
ListCellData是自定义的数据类型,里面存放着提供给View的数据;customlistcell是一个自定义的LinearLayout,也是listView的每一个Item的形式
对于点击了列表中的某一项而需要触发某些事件,需要绑定点击事件

lv.setOnItemClickListener(this);  //如果是this,则在本类里直接重载onItemClick方法即可
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l){
    CustomCellData data = apdaterView.getItem(i); //根据id获得Item
    Toast.makeText(this,String.format("Name:%s",data.getName()),Toast.LENGTH_SHORT).show();   //提示一条信息
}

RadioGroup

和RadioButton一起使用,由多个RadioButton形成一个RadioGroup从而实现单选的功能

Checkbox

独立的选择框,一般用于多选功能的实现,所以和RadioButton(RadioGruop)不同,没有Group的概念

DataPicker

一般是直接调用系统的日期选择控件,通常设置一个按钮来进行配合,点击按钮后触发弹出一个可以选择年月日的对话框的事件,指令为DatePickerDialog()
Dialog相关的一般都是一个类,对其类进行了构造定义后,使用show方法即可显示dialog

TimePicker

和DataPicker一样,选择的是时分秒

Spinner

和ListView很像,同样也是设置Adapter,只不过效果上呈现的点击后出现一个像列表的东西

ProgressBar

顾名思义,进度条而已

PREV
memset的一些坑
NEXT
微信小程序开发日记

评论(0)

评论已关闭