用安卓写一个便签程序

来源:互联网 发布:公务员和程序员 编辑:程序博客网 时间:2024/06/05 16:10

为了练手,用安卓写一个便签程序,功能很简单,一个列表显示有多少便签,点击查看详细,长按能删除,列表界面点击添加按钮能新增。界面草图如下:
界面草图

列表控件(ListView)

上网搜了一下,ListView的使用需要适配器,所以开始先搞定适配器。

适配器

根据列表的适配器类型,列表分为三种,ArrayAdapter,SimpleAdapter和SimpleCursorAdapter。
ArrayAdapter的用法:

public class MyListView extends Activity {    private ListView listView;    //private List<String> data = new ArrayList<String>();    @Override    public void onCreate(Bundle savedInstanceState){        super.onCreate(savedInstanceState);        listView = new ListView(this);        listView.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_expandable_list_item_1,getData()));        setContentView(listView);    }    private List<String> getData(){        List<String> data = new ArrayList<String>();        data.add("测试数据1");        data.add("测试数据2");        data.add("测试数据3");        data.add("测试数据4");        return data;    }}

上面代码使用了ArrayAdapter(Context context, int textViewResourceId, List objects)来装配数据,要装配这些数据就需要一个连接ListView视图对象和数组数据的适配器来两者的适配工作,ArrayAdapter的构造需要三个参数,依次为this,布局文件(注意这里的布局文件描述的是列表的每一行的布局,android.R.layout.simple_list_item_1是系统定义好的布局文件只显示一行文字,数据源(一个List集合)。
此时的界面是这样:

监听ListView点击事件

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {    @Override    public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {        // TODO Auto-generated method stub        int a;    }});

OnItemClickListener是一个接口,此处是用匿名类实现了此接口。也可以在外部定义一个implements 了此接口的类,此处传入该类的一个实例。另外,?是个通配符,可以用任何由Object派生的类型代替,相当于 Class< ? extends Object>。
1. arg0 当前的AdapterView对象,这里就是listView
2. arg1 是AdapterView所绑定的Adapter的getView方法返回的View,即当前item的view,通过它可以获得该项中的各个组件。例如view.textview.settext(“abc”);
3. arg2是当前被点击的条目的索引号
4. arg3是AdapterView所绑定的Adapter的getItemId返回的值,是当前item的ID。这个id根据你在适配器中的写法可以自己定义。例如:list.get(id).equals(“abc”){//Do Something…}

写到这里我想实现一个简单的功能,点击某个item时更改其文字,结果百思不得姐,最后发现需要更改数据源后再通知ArrayAdapter重新加载,直接上代码:

ListView v = (ListView)arg0;
mydata.set(arg2, mydata.get(arg2) + “*”);
ArrayAdapter< String> n = (ArrayAdapter< String>)v.getAdapter();

选项菜单

在AS的res目录上右键》new》android resource directory,里面选择menu,菜单资源必须放在menu目录下。再通过右键菜单添加xml文件,我的如下:

<?xml version="1.0" encoding="utf-8"?><menu xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:app="http://schemas.android.com/apk/res-auto"><item android:id="@+id/action_add" android:title="@string/menu_add" app:showAsAction="ifRoom" /></menu>```-item中的id="@+id/action_id"相当于mfc中的让ide自动分配资源id,会选择一个不存在的序号。然后在activity中调用:<div class="se-preview-section-delimiter"></div>

@Override
public boolean onCreateOptionsMenu(Menu menu){
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.mymenu, menu);
return super.onCreateOptionsMenu(menu);
}

添加消息响应:<div class="se-preview-section-delimiter"></div>

@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_add:
Intent intent = new Intent(this, DetailActivity.class);
startActivity(intent);
return true;
default:
return super.onOptionsItemSelected(item);
}
}
“`
点击添加菜单项时调用添加activity

@Override    public boolean onOptionsItemSelected(MenuItem item) {        switch (item.getItemId()) {            case R.id.action_add:                Intent intent = new Intent(this, DetailActivity.class);                startActivity(intent);                return true;            default:                return super.onOptionsItemSelected(item);        }    }

点击添加菜单项时调用添加activity

问题

contentProvider怎么定义?
Uri.parse中的content://怎么解释?

0 0
原创粉丝点击