2012-12-17 93 views
1

我有幾個活動,寫入和讀取數據庫。因爲客戶端必須在它們之間切換。如果我在onCreate中保留代碼,當活動重新回到屏幕時,不會更新不同的視圖。當活動得到關注時,確保所有數據都已過期的最佳方法是什麼? 將evrything從onCreate()移動到onResume()是否明智?android sqlite onresume()oncreate()

有沒有wat讓它更好?

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

我不知道你在問什麼。 – Squonk

回答

1

如果你沒有完成你的活動,比你不需要寫在所有的onResume東西()

你應該寫這篇文章的onResume()。

public void onResume(){ 
    adapter = new CandidateAdapter(this,(ArrayList) candidates); 
    lvMain.setAdapter(adapter); 
    adapter.notifyDataSetChanged() 
} 

CandidateAdapter定義爲類變量。

+0

我更新了代碼,但它不能以所需的方式工作。 – Yarh

+0

它對我有用,請試試.... –

+0

仍然沒有效果。如果刪除super.onResume()應用程序剛剛完成錯誤「沒有通過超級onResume調用」 – Yarh