我正在尝试为我的自定义ExpandableListView调用notifyDataSetChanged。发生的事情是我的孩子列表,它显示所选文件夹(组列表)中的文件。点击孩子时,会询问是否删除文件。然后,删除后,ExpandableList将“刷新”。但不知何故,我无法调用notifyDataSetChanged方法。
我的自定义适配器:
public class customListAdapter extends BaseExpandableListAdapter {
// Sample data set. children[i] contains the children (String[]) for groups[i].
private File mapFolder = new File (Environment.getExternalStorageDirectory(),"/MLT/A");
private File recordFolder = new File (Environment.getExternalStorageDirectory(),"/MLT/B");
private File scribbleFolder = new File (Environment.getExternalStorageDirectory(),"/MLT/C");
private String[] groups = { "A", "B", "C" };
private String[][] children = { mapFolder.list(), recordFolder.list(), scribbleFolder.list() };
public Object getChild(int groupPosition, int childPosition) {
return children[groupPosition][childPosition];
}
public long getChildId(int groupPosition, int childPosition) {
return childPosition;
}
public int getChildrenCount(int groupPosition) {
return children[groupPosition].length;
}
public View getChildView(int groupPosition, int childPosition, boolean isLastChild,
View convertView, ViewGroup parent) {
TextView textView = new TextView(MLT_File.this);
textView.setBackgroundColor(Color.BLACK);
textView.setGravity(Gravity.CENTER_VERTICAL | Gravity.LEFT);
textView.setPadding(100, 5, 0, 5);
textView.setTextColor(Color.WHITE);
textView.setTextSize(23);
textView.setId(1000);
textView.setText(getChild(groupPosition, childPosition).toString());
return textView;
}//getChildView
public Object getGroup(int groupPosition) {
return groups[groupPosition];
}
public int getGroupCount() {
return groups.length;
}
public long getGroupId(int groupPosition) {
return groupPosition;
}
public View getGroupView(int groupPosition, boolean isExpanded, View convertView,
ViewGroup parent) {
TextView textView = new TextView(MLT_File.this);
textView.setBackgroundColor(Color.WHITE);
textView.setGravity(Gravity.CENTER_VERTICAL | Gravity.LEFT);
textView.setPadding(100, 0, 0, 0);
textView.setTextColor(Color.BLACK);
textView.setTextSize(25);
textView.setText(getGroup(groupPosition).toString());
return textView;
}
public boolean isChildSelectable(int groupPosition, int childPosition) {
return true;
}
public boolean hasStableIds() {
return true;
}
public void notifyDataSetChanged() {
this.notifyDataSetChanged();
}
}//customListAdapter
my onCreate:
// Set up our adapter
listAdapter = new customListAdapter();
expLV = (ExpandableListView) findViewById(R.id.mlt_expList);
expLV.setAdapter(listAdapter);
//registerForContextMenu(expLV);
expLV.setOnChildClickListener(new OnChildClickListener()
{
@Override
public boolean onChildClick(ExpandableListView parent, View v,
int groupPosition, int childPosition, long id)
{
// TODO Auto-generated method stub
String parentName = "";
if (groupPosition == 0)
{
parentName = "A";
}
else if (groupPosition == 1)
{
parentName = "B";
}
else if (groupPosition == 2)
{
parentName = "C";
}
TextView childView = (TextView) v;
String childName = childView.getText().toString();
File file = new File(Environment.getExternalStorageDirectory(),"/Folder/"+childName);
file.delete();
return false;
}
});//OnChildClickListener
我的自定义中的notifyDataSetChanged()是我试图做的,因为我意识到我的ExpandableList没有。但是,当我按下expLV.n ...
时,我创建的方法也不会出现答案 0 :(得分:5)
实际上,有notifyDataSetChanged()
function on BaseExpandableListAdapter
。
你没有完成任何事情:
public void notifyDataSetChanged() {
this.notifyDataSetChanged();
}
请将其删除。
更改数据集后,从adapter.notifyDataSetChanged()
onClick(View v)
致电OnItemClickListener
。
答案 1 :(得分:0)
我知道这已经很老了,但是对于仍然遇到此问题的人,您可以使用here中提到的invalidateViews()
中的ExpandableListeView
答案 2 :(得分:-1)
我所做的不是在onCreate中创建它,而是在onResume()中创建它。当我对它进行任何更改时,它将再次创建。这样做的原因是因为我正在使用TabMenu,当我在它们之间切换时,该类不再创建,因此导致列表处于相同的状态。
通过使用onResume,它也简化了我的工作,因为当我想要刷新时,我所要做的就是调用onResume()。
希望这有助于其他人。 =)