2016-11-09 47 views
-1

在我的代码中,当删除列表视图列表视图的行不会改变。我使用adapter.notifyDataSetChange()但它不是word.this是我的代码:代码使类的位置不同。notifyDataSetChanged在我的活动中不工作

CustomList adapter; 
Integer[] imageId; 
public String[] _Data2; 
public int positionAll; 
ArrayList<ArrayList<String>> _Data = new ArrayList<ArrayList<String>>(); 
DataBase data = new DataBase(Show_Code.this, "MELK_TBL"); 


try { 
     data.open(); 
     _Data = data.GetData(); 
     imageId = new Integer[_Data.size()]; 
     _Data2 = new String[_Data.size()]; 
     for (int i = 0; i < _Data.size(); i++) { 
      imageId[i] = R.drawable.municipal; 
      _Data2[i] = _Data.get(i).get(1) + "_" + _Data.get(i).get(2) + "_" + _Data.get(i).get(3) + "_" + _Data.get(i).get(4) + "_" + _Data.get(i).get(5) + "_" + _Data.get(i).get(6) + "_0"; 
     } 
     adapter = new CustomList(Show_Code.this, _Data2, imageId); 
     data.close(); 
    } catch (Exception e) { 
     Toast.makeText(getApplication(), e.toString(), Toast.LENGTH_LONG).show(); 
    } 

    list.setAdapter(adapter); 



list.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { 

     @Override 
     public boolean onItemLongClick(AdapterView<?> parent, View view, 
             int position, long id) { 

      try { 
       data.open(); 
       data.Delete(_Data.get(position).get(1), _Data.get(position).get(2), _Data.get(position).get(3), _Data.get(position).get(4), _Data.get(position).get(5), _Data.get(position).get(6), _Data.get(position).get(7)); 
       data.close(); 
       adapter.notifyDataSetChanged(); 
      } catch (Exception e) { 
       Toast.makeText(getApplicationContext(), e.toString(), Toast.LENGTH_LONG).show(); 
      } 
      return true; 
     } 
    }); 

请帮帮我,我为它做又没时间:(

回答

0

删除值后,您需要传递删除所有这些值的新arraylist,然后通知适配器类。你的情况看下面的代码

list.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { 

     @Override 
     public boolean onItemLongClick(AdapterView<?> parent, View view, 
             int position, long id) { 

      try { 
       data.open(); 
       data.Delete(_Data.get(position).get(1)); 
       data.close(); 
       **//Edited code...** 
       _Data.get(position).remove(1); 
       adapter.refreshView(_Data); 
       **//Edited code...** 
      } catch (Exception e) { 
       Toast.makeText(getApplicationContext(), e.toString(), Toast.LENGTH_LONG).show(); 
      } 
      return true; 
     } 
    }); 

而且在适配器类refreshview方法会像下面,

public void refreshView(String[] _Data) { 
    this._Data = _Data; 
    notifyDataSetChanged(); 
    } 

通过这种方式,您可以通知数据。例如,我只删除了一个值并通知。

希望这是有益:)

+0

此代码不起作用。 – amardco

+0

@amardco:您需要从活动.i.e。中的String数组中删除已删除的值,在您的情况下,_Data2是String数组。所以你必须从'_Data2'中删除已删除的值,并且需要用新数组替换适配器的String数组值,然后通知适配器。它会工作,这是我在这里解释的。在您的情况下,您已删除活动中的值,但尚未将该值传递给适配器,这就是为什么通知不起作用。 – Jeevanandhan

+0

这是最后的工作。谢谢 – amardco

0

你需要你databe再次重新组织你的代码,使用方法,只为选择和做list.setAdapter(adapter);然后使用adapter.notifyDataSetChanged();

+0

它不起作用。我想要删除一行时它的工作。 – amardco

+0

当然,但是您需要从数据库重新加载Object,在使用'notifyDataSetChanged()'之前,用当前数据重置Adapter。 –

2

你逝去的适配器_Data2对象从数据中删除后,您应该更新同一对象尝试在onItemLongClick(AdapterView<?> parent, View view,int position, long id)方法data.close()前加入这样的:。

_Data = data.GetData(); 
imageId = new Integer[_Data.size()]; 
_Data2.clear(); 
for (int i = 0; i < _Data.size(); i++) { 
    imageId[i] = R.drawable.municipal; 
    _Data2[i] = _Data.get(i).get(1) + "_" + _Data.get(i).get(2) + "_" + _Data.get(i).get(3) + "_" + _Data.get(i).get(4) + "_" + _Data.get(i).get(5) + "_" + _Data.get(i).get(6) + "_0"; 
} 

请勿创建_Data2的新对象。只需清除同一个对象并在其中添加整个数据,然后您可以拨打adapter.notifyDataSetChanged()然后这将自动更新。

+0

_Data2不清除function.it是字符串数组。 – amardco

+1

_Data2的大小是否与之前相同?无权利?你应该为它使用ArrayList,这样当它更新时它会自动在你的适配器上更新notifyDataSetChange。 –

+0

我通过将_Data2定义为arraylist 更改了代码并更改了您的代码,但它不再工作 – amardco

3

由于数组的大小在运行时不改变,这样你们需要创建新的适配器,然后重新设置列出 你必须在onItemLongClick

data.open(); 
     _Data = data.GetData(); 
     imageId = new Integer[_Data.size()]; 
     _Data2 = new String[_Data.size()]; 
     for (int i = 0; i < _Data.size(); i++) { 
      imageId[i] = R.drawable.municipal; 
      _Data2[i] = _Data.get(i).get(1) + "_" + _Data.get(i).get(2) + "_" + _Data.get(i).get(3) + "_" + _Data.get(i).get(4) + "_" + _Data.get(i).get(5) + "_" + _Data.get(i).get(6) + "_0"; 
     } 
     adapter = new CustomList(Show_Code.this, _Data2, imageId); 
     data.close(); 
     list.setAdapter(adapter) 
添加以下代码
相关问题