2012-01-22 10 views
4

私のカスタムExpandableListViewのnotifyDataSetChangedを呼び出そうとしています。私の子リストの場合は、選択したフォルダ(グループリスト)のファイルを表示します。子がクリックされると、ファイルを削除するかどうかを尋ねます。削除後、ExpandableListは「リフレッシュ」します。何とか、私はnotifyDataSetChangedメソッドを呼び出すことができませんでした。カスタムExpandableListViewの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 

私のonCreate:私はExpandableListはそれを持っていない実現として

// 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()私のカスタムでは、私がしようとしたものです。しかし、私が作成した方法は、expLV.nを押すと表示されません...

答えて

-1

よく...誰も本当に私にそれをする方法を教えてくれなかったので、私はダムだが便利かもしれない方法を考えた。

これは、onCreateで作成するのではなく、onResume()で作成したものです。私はそれに何か変更を加えると、再び作成されます。理由は私がTabMenuを使用しているので、私はそれらの間で切り替えると、クラスが再び作成されないため、リストが同じ状態になる原因となります。

onResumeを使って、私はそれをリフレッシュしたいときと同じように私の仕事を単純化します。私がしなければならないのはonResume()です。

お願いこの他の人にお勧めします。 =)

5

実際には、notifyDataSetChanged() function on BaseExpandableListAdapterがあります。

あなたはと何も達成されていません:

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

それを削除してください。

データセットを変更した後は、OnItemClickListeneronClick(View v)からを呼び出してください。

+0

私は、onItemClickListenerではなくonChildClickListener()を呼び出しました。私は何が間違っているかわからないが、私はちょうどadapter.notifyDataSetChangedを呼び出すことができませんでした。 notifyとnotifyallのみがあります – Jovi

+0

アダプタはどこで宣言しましたか?それはクラス変数ですか?あなたのonClickメソッドを投稿してください... – Rotemmiz

+0

私は詳細を追加しました=) – Jovi