0
我有一個自定義列表視圖,其中顯示了每個列表項的名稱,日期和時間。 我有一個擴展BaseAdapter的適配器。 我想在數據庫中的數據發生變化時更新它。 這裏是我的代碼:在Android中更新自定義列表視圖
public class UpcomingReminders extends Activity {
private Button addReminderButton;
public static DataHelper dh;
private ListView lv;
private DataSetObserver observer;
private EfficientAdapter adapter;
private static class EfficientAdapter extends BaseAdapter implements Observer {
private LayoutInflater mInflater;
private String date;
private String time;
//This list has the data to be shown in the listview
private List <Reminder> upcomingReminders;
//not sure how to use these
private final DataSetObservable mDataSetObservable = new DataSetObservable();
public void registerDataSetObserver(DataSetObserver observer) {
mDataSetObservable.registerObserver(observer);
}
public void notifyDataSetChanged() {
mDataSetObservable.notifyChanged();
}
public EfficientAdapter(Context context) {
//This will populate the list to be shown
upcomingReminders = dh.selectAllUpcoming();
mInflater = LayoutInflater.from(context);
}
public int getCount() {
// TODO Auto-generated method stub
return upcomingReminders.size();
}
public Object getItem(int position) {
// TODO Auto-generated method stub
return position;
}
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
ViewHolder holder;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.upcominglistview, null);
holder = new ViewHolder();
holder.reminderName = (TextView) convertView.findViewById(R.id.nameUpcoming);
holder.reminderDate = (TextView) convertView.findViewById(R.id.dateUpcoming);
holder.addedBy = (TextView) convertView.findViewById(R.id.AddedByUpcoming);
holder.reminderTime = (TextView) convertView.findViewById(R.id.timeUpcoming);
convertView.setTag(holder);
}
else {
holder = (ViewHolder) convertView.getTag();
}
String str = upcomingReminders.get(position).getReminderName();
holder.reminderName.setText(str);
Calendar d = Calendar.getInstance();
d = upcomingReminders.get(position).getReminderDateAndTime();
date = ""+d.get(Calendar.MONTH)+"/"+d.get(Calendar.DAY_OF_MONTH)+"/"+d.get(Calendar.YEAR);
holder.reminderDate.setText(date);
time = ""+d.get(Calendar.HOUR_OF_DAY)+":"+d.get(Calendar.MINUTE);
holder.reminderTime.setText(time);
holder.reminderName.setOnClickListener(new textViewClickListener(position));
holder.reminderDate.setOnClickListener(new textViewClickListener(position));
return convertView;
}
class textViewClickListener implements OnClickListener {
int posit;
public textViewClickListener(int pos)
{
this.posit = pos;
}
public void onClick(View v) {
{// you can write the code what happens for the that click and
// you will get the selected row index in position
Bundle b = new Bundle();
b.putString("title", upcomingReminders.get(posit).getReminderName());
b.putString("date", date);
b.putString("time", time);
try {
Intent myIntent = new Intent();
Context ctx = v.getContext();
myIntent.setClass(ctx, ListItemDetails.class);
myIntent.putExtras(b);
ctx.startActivity(myIntent);
} catch (Exception e) {
// TODO: handle exception
Log.d("Activity call error:%s",e.getMessage());
}
}
}
}
static class ViewHolder {
TextView reminderName;
TextView reminderDate;
TextView reminderTime;
TextView addedBy;
}
public void update(Observable observable, Object data) {
// TODO Auto-generated method stub
}
}
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.dh = new DataHelper(this);
setContentView(R.layout.upcoming);
lv = (ListView)findViewById(R.id.list);
adapter = new EfficientAdapter(this);
lv.setAdapter(adapter);
//---------------------------------------
this.addReminderButton = (Button)findViewById(R.id.AddButton);
this.addReminderButton.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Intent i = new Intent();
i.setClass(v.getContext(),AddReminderInfo.class);
startActivity(i);
}
});
}
@Override
protected void onResume(){
super.onResume();
if(Globals.isReminderOK){
Globals.isReminderOK = false;
Log.i("ReminderID",""+Globals.reminderID);
dh.updateRow(Globals.reminderID,1);
dh.selectAllUpcoming();
adapter.notifyDataSetChanged();
}
}
}
做一些改變後,我更新使用dh.upDateRow分貝。這將刪除當前顯示在列表中的一行。 如何更新列表視圖以顯示此更改?
非常感謝。
請分享你的問題的解決方案.. – 2012-09-17 06:29:46
你好,能否請您分享您的解決方案。 – 2015-05-20 12:51:41