android sqlite onresume() oncreate()

У меня есть несколько действий, которые записывают и читают в базу данных. Поскольку клиент должен переключаться между ними. Если я оставлю код только в onCreate, разные представления не будут обновляться, когда активность вернется на экран. Каков наилучший способ убедиться, что все данные обновляются, когда активность получает фокус? Разумно ли переместить все из 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;
    }



}

person Yarh    schedule 17.12.2012    source источник
comment
Я понятия не имею, что вы здесь спрашиваете.   -  person Squonk    schedule 17.12.2012


Ответы (1)


Если вы не заканчиваете свою деятельность, вам не нужно писать все в onResume()

вы должны написать именно это в onResume().

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

определите свой CandidateAdapter как переменную класса.

person Jignesh Ansodariya    schedule 17.12.2012
comment
Все равно никакого эффекта. Если удалить super.onResume(), приложение просто завершается с ошибкой. Не звонил через super onResume - person Yarh; 17.12.2012
comment
добавьте больше операторов в onResume() и попробуйте, нет необходимости удалять super.onResume(). - person Jignesh Ansodariya; 17.12.2012