2013-05-01 4 views
2

У меня есть ListView. Когда я нажимаю кнопку строки списка, кнопка будет создана в main.xml, у меня есть кнопка onclicklistener кнопки в пользовательском адаптере listView. Я сохраняю щелчок этой кнопки в sqlite и этим sqlite я обновляю адаптер gridview.Как обновить мой gridView?

Так что мой вопрос, когда я нажимаю на кнопку, GridView не обновляет себя, и когда я закрываю приложение и открываю его снова, он обновляется.

Я попытался с помощью notifydatasetchanged(), но не работает ..

Это код в пользовательский список Посмотреть адаптер

holder.checkbox.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      String text = holder.tvName.getText().toString(); 
      String image = holder.tvimageurl.getText().toString(); 
      DatabaseHandler db = new DatabaseHandler(activity); 
      db.addContact(new Contact(text, image)); 
      db.close(); 

и это в основном активность

GridView listView = (GridView) findViewById(R.id.gridview1); 
    imgAdapter = new ImageAdapter(this); 
    listView.setAdapter(imgAdapter); 
    imgAdapter.notifyDataSetChanged(); 

ImageAdapter код ,

public class ImageAdapter extends BaseAdapter { 

    Activity activity; 
    List<Contact> item; 
    LayoutInflater inflater; 
    ImageAdapter imgAdapter; 
    private DisplayImageOptions options; 
    private DisplayImageOptions options2; 
    ImageLoader imageLoader; 
    private Contact objBean; 
    String getUrl,getId; 
    ObjectOutputStream oos; 
    FileOutputStream fos; 



    public ImageAdapter(Activity act) { 
     this.activity=act; 

     inflater = act.getLayoutInflater(); 


     DatabaseHandler db = new DatabaseHandler(activity); 
     item = db.getAllContacts(); 
     db.close(); 
} 

    @Override 
    public int getCount() { 
     return item.size(); 
    } 

    @Override 
    public Contact getItem(int position) { 
     return null; 
    } 

    @Override 
    public long getItemId(int position) { 
     return position; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     final LinearLayout imageView; 
     if (convertView == null) { 
      imageView = (LinearLayout)  inflater.inflate(R.layout.item_grid_image, parent, false); 
     } else { 
      imageView = (LinearLayout) convertView; 
     } 

ответ

2

Перед тем, как позвонить notifyDataSetChanged, необходимо добавить данные в ImageAdapter. Или создать его заново и снова установить на ваш GridView

UPD: Ok, а затем положить загрузочный код для отдельного метода внутри ImageAdapter и вызвать обновления после добавления новых данных

public ImageAdapter(Activity act) { 
     this.activity=act; 

     inflater = act.getLayoutInflater(); 
     refresh(); 
} 

void refresh() 
{ 
     DatabaseHandler db = new DatabaseHandler(activity); 
     item = db.getAllContacts(); 
     db.close(); 
     notifyDatasetChanged(); 
} 

Но лучше добавить новый контакт вручную ваш ImageAdapter при нажатии на кнопке

public void onClick(View v) { 
    String text = holder.tvName.getText().toString(); 
    String image = holder.tvimageurl.getText().toString(); 
    DatabaseHandler db = new DatabaseHandler(activity); 
    Contact contact = new Contact(text, image) 
    db.addContact(contact); 
    db.close(); 
    imgAdapter.addItem(contact) 
    imgAdapter.notifyDatasetChanged(); 
} 
+0

я сделал это в другой адаптер адаптер используется для GridView – Saad

+0

Покажите нам код ImageAdapter. Больше всего вы не добавляете к нему данные, когда добавляете их в базу данных. – httpdispatch

+0

i updated мои вопросы – Saad

3

вы можете заставить Adapter обновить себя в пределах вашего onClick метода, например,

public void onClick(View v) { 
    String text = holder.tvName.getText().toString(); 
    String image = holder.tvimageurl.getText().toString(); 
    DatabaseHandler db = new DatabaseHandler(activity); 
    db.addContact(new Contact(text, image)); 
    db.close(); 
    notifyDataSetChanged(); // This will do the trick 
} 

EDIT

Как вы получаете данные при перезапуске, что означает, что он, безусловно, сохраняются в базе данных ОК, это говорит о том, что, когда вы аннулированию Adapter это не перезагрузка базы данных , Попробуйте что-то вроде пользовательского метода в ImageAdapter, как это:

public void onClick(View v) { 
    String text = holder.tvName.getText().toString(); 
    String image = holder.tvimageurl.getText().toString(); 
    DatabaseHandler db = new DatabaseHandler(activity); 
    db.addContact(new Contact(text, image)); 
    db.close(); 
    reloadData(); // will refresh the data 
    notifyDataSetChanged(); // will update the contents 
} 

private void reloadData() { 
    DatabaseHandler db = new DatabaseHandler(activity); 
    item = db.getAllContacts(); 
    db.close(); 
} 
+0

попробовал это, но неплохо работает .. он работает, но после перезагрузки приложения – Saad

Смежные вопросы