編輯:關於Android編程
有時候我們需要修改列表裡的數據,並實時刷新,我們除了在在外部調用adapter.notifyDataSetChanged()方法來通知activity刷新, 如果在adapter內部有涉及到更新數據,刪除或者增加數據,就可以直接在adapter內部調用notifyDataSetChanged()這個方法,前提是該listview綁定的數據有改變。
以下例子結合Handler,線程展示
public class MyAdapter extends BaseAdapter {
private final static String tag = "MyAdapter";
private List alarms;
private static final int MODIFY_FAIL = 13;
private static final int MODIFY_SUCCESS = 12;
private static final int DELETE_SUCCESS= 10;
private static final int STUDY_SUCCESS = 11;
private Context context;
private LayoutInflater inflater;
private TextView tvDeviceName;
int msgType;
private Alarm alarm;
private Dialog confirmDlg;
// BaseHandler baseHandler;
public MyAdapter(Context context, List alarms) {
// TODO Auto-generated constructor stub
this.context = context;
this.alarms = alarms;
inflater = LayoutInflater.from(context);
}
.......
@Override
public View getView(int position, View convertView, ViewGroup parent) {
alarm = alarms.get(position);
if (convertView == null) {
convertView = inflater.inflate(R.layout.alarm_manage_item, parent,
false);
}
tvDeviceName = (TextView) convertView.findViewById(R.id.tv_device_name);
tvDeviceName.setText(alarm.getName());
.......
return convertView;
}
由於代碼太多,中間部分省略了
以下是Handler部分,通過Handler,Thread,Message可進行異步操作 ,記住,在Handler的CallBack()方法內不能對UI進行操作,但是可以發送一個空消息到消息隊列
contextHandler.sendEmptyMessage(MODIFY_FAIL);,這樣
handleMessage()方法就能夠處理消息隊列中的消息了,在這個方法裡面可對UI進行操作,
private BaseHandler contextHandler = new BaseHandler(context) { @Override
public void callBack(String recvHex) {
// TODO Auto-generated method stub
super.callBack(recvHex);
recvHex = recvHex.toUpperCase().trim();
String[] strs = recvHex.split(" ");
msgType = OutPutProtocol.analysisOutPutOperInfo(recvHex);
// 修改名稱應答
if (DeviseSettingProtocol.modifyDeviceNameMsg(recvHex) == Resp.Rst_Success) {
if(strs[3].equals("00"))
{
SettingThread thread = new SettingThread(
contextHandler,// 返回結果handler
context, SettingThread.OperType_EditAlarm, alarm);
thread.start();
ProgressDialog.dismissProgressDialog();
}
else if(strs[3].equals("02")||strs[3].equals("FF"))
{
contextHandler.sendEmptyMessage(MODIFY_FAIL);//將一個空消息送到消息隊列
}
}
}
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
super.handleMessage(msg);
switch (msg.what) {
//修改名稱失敗
case MODIFY_FAIL:
{
Toast.makeText(context, "修改失敗", Toast.LENGTH_SHORT).show();
}
case Resp.Rst_Fail:
{
Toast.makeText(context, "刪除失敗", Toast.LENGTH_SHORT).show();
}
case SettingThread.OperType_DelAlarm:
{
MyAdapter.this.notifyDataSetChanged();
Toast.makeText(context, "刪除成功!",
Toast.LENGTH_SHORT).show();
}
case SettingThread.OperType_EditAlarm:
{
MyAdapter.this.notifyDataSetChanged();
Toast.makeText(context, "修改成功!",
Toast.LENGTH_SHORT).show();
}
default:
break;
}
}
};// 通過線程刪除數據庫中的數據 SettingThread thread = new SettingThread( contextHandler,// 返回結果handler context, SettingThread.OperType_DelAlarm, alarm); thread.start();
線程機制,將Handler和一個標識符
SettingThread.OperType_DelAlarm傳到線程裡,在該線程執行耗時操作,並將操作用Msg送到消息隊列,然後返回給UI線程,這時UIActivity的Handler就可以取出消息隊列中的消息(對應的標識符),然後就可以對UI進行操作了,這就是異步操作
ListView的下拉刷新上拉加載以及帶列的橫向滾動
相信有很人做的項目估計都用的到這個。就是ListView的下拉刷新上拉加載還有就是列的橫向滾動;PS:橫向滾動帶表頭與固定列(相信蠻多人都有這樣的需求吧?就是在ListV
Android開發中的Surface庫及用其制作播放器UI的例子
1、Surface1.1、 就如在C語言編程一樣,通過一個文件的句柄,就可以操作文件,獲取文件的內容。 同樣的,通過Surface就可以獲取raw buffer其中的內容
學習理解Android菜單Menu操作
今天看了pro android 3中menu這一章,對Android的整個menu體系有了進一步的了解,故整理下筆記與大家分享。PS:強烈推薦《Pro Android 3
Android AndBase框架實現多功能標題欄(一)
本文是針對AndBase框架學習整理的第一篇筆記,想要了解AndBase框架的朋友可以閱讀本文,大家共同學習。1.使用AndBase實現多功能標題欄AndBase框架內部