2012-01-22 2 views
4

Я пытаюсь вызвать notifyDataSetChanged для моего настраиваемого ExpandableListView. что происходит для моего дочернего списка, он показывает файлы в выбранной папке (список групп). при щелчке дочернего элемента, он попросит удалить файл или нет. затем, после удаления, ExpandableList будет «обновляться». но почему-то я не мог вызвать метод notifyDataSetChanged.Как вызвать notifyDataSetChanged для пользовательского ExpandableListView?

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

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 

мой 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 ...

ответ

-1

хорошо ... потому что никто не сказал мне, как это сделать, я думал о том, как это может быть глупо, но полезно.

что я сделал, а затем создавал его в onCreate, я создал его в onResume(). когда я сделаю какие-либо изменения, он будет создан снова. причина для этого заключается в том, что я использую TabMenu, и когда я переключаюсь между ними, класс не создается снова и, следовательно, заставляет список находиться в одном состоянии.

, используя onResume, он также упрощает мою работу, когда я хотел его обновить, все, что мне нужно сделать, это вызвать onResume().

надеюсь, что это поможет другим людям. =)

5

На самом деле есть notifyDataSetChanged() function on BaseExpandableListAdapter.

Вы не выполняете ничего с:

public void notifyDataSetChanged() { 
    this.notifyDataSetChanged(); 
} 

удалите его.

звоните adapter.notifyDataSetChanged() с вашего onClick(View v) в ваш OnItemClickListener после того, как вы изменили свой набор данных.

+0

но то, что я назвал, это onChildClickListener(), а не onItemClickListener. Я не уверен, что не так, но я просто не мог назвать adapter.notifyDataSetChanged. только уведомить и notifyall – Jovi

+0

Где вы заявили свой адаптер? это переменная класса? опубликуйте свой метод onClick ... – Rotemmiz

+0

Я добавил дополнительные сведения =) – Jovi

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