2013-05-01 52 views
2

我有一个ListView。当我点击列表视图的按钮时,将在main.xml中创建一个按钮,我在自定义列表视图适配器中有按钮onclicklistener。我在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: 好,然后把加载代码到单独的方法你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(); 
} 

后不过还好手动添加新的联系人当你点击这个按钮,

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 2013-05-01 10:13:07

+0

适配器向我们展示ImageAdapter的代码。最重要的是,当你将数据添加到数据库时,不会向其添加数据。 – httpdispatch 2013-05-01 10:17:50

+0

我更新了我的问题 – Saad 2013-05-01 10:22:56

3

您ImageAdapter您可以强制AdapteronClick方法如内进行自我更新

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 
} 

编辑

如你,当你重新启动,这意味着它肯定是被保存在数据库中确定获取数据,这表明当你无效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 2013-05-01 10:14:19