我有几个写入和读取数据库的活动。因为客户必须在它们之间切换。如果我只在onCreate中保留代码,当活动回到屏幕时,不会更新不同的视图。在活动获得关注时,确保所有数据都处于最佳状态的最佳方法是什么? 将evrything从onCreate()移到onResume()?
是明智的吗?有没有让它变得更好?
public class InboxActivity extends ListActivity {
List<Candidate> candidates;
private DatabaseHandler db;
private CandidateAdapter adapter;
private ListView lvMain;
public void onDestroy(){
if (db != null)
db.close();
super.onDestroy();
//db.close();
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.inbox_list);
db = new DatabaseHandler(this);
candidates = db.getAllCandidates(1);
db.close();
adapter = new CandidateAdapter(this,(ArrayList) candidates);
lvMain = getListView();
lvMain.setAdapter(adapter);
lvMain.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
String name = ((TextView) view.findViewById(R.id.from)).getText().toString();
Log.d("Name ", name);
Intent in = new Intent(getApplicationContext(), SingleMenuItemActivity.class);
in.putExtra("name", name);
Log.d("Starting activity ", "Yeah ");
startActivity(in);
}
});
}
public void onResume(){
super.onResume();
db = new DatabaseHandler(this);
candidates = db.getAllCandidates(1);
db.close();
adapter = new CandidateAdapter(this,(ArrayList) candidates);
lvMain = getListView();
lvMain.setAdapter(adapter);
adapter.notifyDataSetChanged();
}
}
适配器
public class CandidateAdapter extends BaseAdapter{
Context ctx;
LayoutInflater lInflater;
ArrayList<Candidate> objects;
CandidateAdapter(Context context, ArrayList<Candidate> candidates) {
ctx = context;
objects = candidates;
lInflater = (LayoutInflater) ctx
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
public int getCount() {
return objects.size();
}
public Object getItem(int position) {
return objects.get(position);
}
public long getItemId(int position) {
return position;
}
Candidate getCandidate(int position) {
return ((Candidate) getItem(position));
}
public View getView(int position, View convertView, ViewGroup parent) {
// используем созданные, но не используемые view
View view = convertView;
if (view == null) {
view = lInflater.inflate(R.layout.inbox_list_item, parent, false);
}
Candidate p = getCandidate(position);
((TextView) view.findViewById(R.id.from)).setText(p.get_name());
((TextView) view.findViewById(R.id.subject)).setText(p.get_office());
((RatingBar) view.findViewById(R.id.rateindicator)).setRating(p.get_ranking());
int loader = R.drawable.loader;
ImageView image = (ImageView) view.findViewById(R.id.photo);
String image_url = p.get_photograph();
ImageLoader imgLoader = new ImageLoader(ctx);
imgLoader.DisplayImage(image_url, loader, image);
return view;
}
}
答案 0 :(得分:1)
如果你没有完成你的活动,那么你就不需要在onResume()中写下所有的东西了
你应该在onResume()中写这个。
public void onResume(){
adapter = new CandidateAdapter(this,(ArrayList) candidates);
lvMain.setAdapter(adapter);
adapter.notifyDataSetChanged()
}
将您的CandidateAdapter
定义为类变量。