在写一下listview布局时,常常要对某一项做出修改,点击某一项后一般会跳出一个弹窗,弹窗会显示一些信息,且窗口下方有一个或几个按钮提醒你进行下一步操作。
下面是效果图。
接下来的一些内容与我之前博客有交叉的地方,且实现的方法里涉及到对日期选择及下拉列表Spinner控件的使用,请参见我的上一篇博客Android日期选择及下拉列表Spinner控件的使用
具体的代码实现如下
首先是获取点击项以及点击项的各个内容,我这里是listview布局,所以可直接使用listView.setOnItemClickListener方法
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {//单击修改列表项
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) {
//获取点击项:
HashMap<String, String> temp = (HashMap<String, String>) listViewAdapter.getItem(position);
final String taskID = temp.get("_id"); //获取点击的提醒项ID
final String taskDate = temp.get("consumeDate"); //获取点击的提醒项consumeDate
final String taskKinds = temp.get("consumeKinds"); //获取点击的提醒项consumeKinds
final String taskMoney = temp.get("consumeMoney"); //获取点击的提醒项consumeMoney
final String taskText = temp.get("consumeText"); //获取点击的提醒项consumeText
//获取这些内容是要在修改的方法中进行初始化,不能点击修改之后各个输入框都是空的,而应该显示原来的值
Cursor result = dbRead.query("tb_consume", null, "_id=? ", new String[]{taskID}, null, null, null, null);
//我这里用的是sqlite数据库,你可根据自己的内容进行获取即可。
result.moveToFirst();
HashMap<String, String> itemFindByID = new HashMap<String, String>();
itemFindByID.put("id", "ID:" + String.valueOf(result.getInt(0)) + "\n");
itemFindByID.put("consumeDate", "日期:" + result.getString(1) + "\n");
itemFindByID.put("consumeKinds", "种类:" + result.getString(2) + "\n");
itemFindByID.put("consumeMoney", "金额:" + result.getString(3) + "\n");
itemFindByID.put("consumeText", "备注:" + result.getString(4) + "\n");
//以下是AlertDialog的使用
new AlertDialog.Builder(getActivity())
.setTitle("详细信息")
.setMessage(itemFindByID.get("id") + itemFindByID.get("consumeDate") + itemFindByID.get("consumeKinds") + itemFindByID.get("consumeMoney")
+ itemFindByID.get("consumeText"))
.setNegativeButton("修改该项内容", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface arg0, int arg1) {
final Bundle bundle = new Bundle();
bundle.putString("taskID", taskID);
bundle.putString("taskDate", taskDate);
bundle.putString("taskKinds", taskKinds);
bundle.putString("taskMoney", taskMoney);
bundle.putString("taskText", taskText);
UpdateFragment updateFragment = new UpdateFragment();
updateFragment.setArguments(bundle);
getFragmentManager().beginTransaction()
.replace(R.id.fragment_container, updateFragment)
.commit();
}
})
.setPositiveButton("关闭窗口", null)
.create()
.show();
}
});
然后在修改的Activity里获取各值
//先将EditView的三项获取并放置
final String updateDate = getArguments().getString("taskDate");
final String updateMoney = getArguments().getString("taskMoney");
final String updateText = getArguments().getString("taskText");
et_date.setText(updateDate);//这里的日期是原来的日期,在这可对et_date监听并使用日期选择方法,但不能将当前系统日期置入
et_money.setText(updateMoney);
et_text.setText(updateText);
最重要的就是spinner的值,初始值应该是listview的值,而不能按照之前的顺序直接放在那
final String updateKinds = getArguments().getString("taskKinds");//同上面一样获取之前的值
List<String> list = new ArrayList<String>();
list.add("000");//这里一定要补一个位,可以是空格,也可以随便输
list.add("零花");
list.add("吃饭");
list.add("日常");
list.add("学习");
list.add("饭卡");//因为不知道原来是哪个,所以要全部添加
list.remove(updateKinds);//将之前选择的那一项删除,因为要放在首位,所以后面会多出一位
list.set(0, updateKinds);//将之前选择的那一项覆盖0位,这样原来选择的那一项内容就成为首位
接下来根据自己的内容提交就OK
END