用安卓写一个便签程序

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

列表控件(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://怎么解释?


版权声明:本文为huorexiaji原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
THE END
< <上一篇
下一篇>>