2017-09-28 7 views
0

ねえみんな私はandroidmを新しくして、ちょっと立ち往生しました。ExpandableListViewアイテム/リフレッシュアレイを変更しますか?

デフォルトの項目(例:Subject1、Subject2、Room1、Room2 ...)を持つ展開可能なリストビューを持つタイムテーブルを作成したいと思います。私は、長時間押さえて拡大可能なリストの子を「編集」したい。

これは、ここで

public class TuesdayActivity extends AppCompatActivity { 

String[] myArray = new String[]{"Subject1", "Subject2", "Subject3", "Subject4", "Subject5", "Subject6"}; 

public void fillData() 
{ 
    times = new ArrayList<>(); 
    info = new HashMap<String, List<String>>(); 

    times.add("8:00-10:00"); 
    times.add("10:00-12:00"); 
    times.add("12:00-14:00"); 
    times.add("14:00-16:00"); 
    times.add("16:00-18:00"); 
    times.add("18:00-20:00"); 


    List<String> from_8 = new ArrayList<>(); 
    List<String> from_10 = new ArrayList<>(); 
    List<String> from_12 = new ArrayList<>(); 
    List<String> from_14 = new ArrayList<>(); 
    List<String> from_16 = new ArrayList<>(); 
    List<String> from_18 = new ArrayList<>(); 

    from_8.add(myArray[0]); 
    from_8.add("Room1"); 

    from_10.add("Subject2"); 
    from_10.add("Room2"); 

    from_12.add("Subject3"); 
    from_12.add("Room3"); 

    from_14.add("Subject4"); 
    from_14.add("Room4"); 

    from_16.add("Subject5"); 
    from_16.add("Room5"); 

    from_18.add("Subject6"); 
    from_18.add("Room7"); 

    info.put(times.get(0),from_8); 
    info.put(times.get(1),from_10); 
    info.put(times.get(2),from_12); 
    info.put(times.get(3),from_14); 
    info.put(times.get(4),from_16); 
    info.put(times.get(5),from_18); 


} 




ExpandableListView expandableListView; 

List<String > times; 
Map<String,List<String>> info; 
ExpandableListAdapter listAdapter; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 


    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_tuesday); 

    expandableListView = (ExpandableListView) findViewById(R.id.exList); 
    fillData(); 

    listAdapter = new MyExListAdapter(this,times,info); 


    expandableListView.setAdapter(listAdapter); 
    expandableListView.setOnGroupExpandListener(new ExpandableListView.OnGroupExpandListener() { 
     @Override 
     public void onGroupExpand(int groupPosition) { 

      Toast.makeText(getBaseContext(),times.get(groupPosition)+ " is expanded",Toast.LENGTH_SHORT).show(); 

     } 
    }); 

    expandableListView.setOnGroupCollapseListener(new ExpandableListView.OnGroupCollapseListener() { 
     @Override 
     public void onGroupCollapse(int groupPosition) { 
      Toast.makeText(getBaseContext(),times.get(groupPosition)+ " is collapsed",Toast.LENGTH_SHORT).show(); 
     } 
    }); 

    expandableListView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { 
     @Override 
     public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) { 
      if (ExpandableListView.getPackedPositionType(id) == ExpandableListView.PACKED_POSITION_TYPE_CHILD) { 
       int groupPosition = ExpandableListView.getPackedPositionGroup(id); 
       int childPosition = ExpandableListView.getPackedPositionChild(id); 

       if(childPosition == 0) 
       { 
        myArray[0] = "Trying to change text"; 
       } 
       return true; 
      } 
      return false; 
     } 
    }); 
} 

}

私のアダプタは、私が長押し上のリソース/文字列を編集したかったが、まず

public class MyExListAdapter extends BaseExpandableListAdapter { 

Context context; 
List<String> times; 
Map<String,List<String>> info; 

public MyExListAdapter(Context context, List<String> times, Map<String, List<String>> info) { 
    this.context = context; 
    this.times = times; 
    this.info = info; 
} 

@Override 
public int getGroupCount() { 

    return times.size(); 
} 

@Override 
public int getChildrenCount(int groupPosition) { 
    return info.get(times.get(groupPosition)).size(); 
} 

@Override 
public Object getGroup(int groupPosition) { 
    return times.get(groupPosition); 
} 

@Override 
public Object getChild(int groupPosition, int childPosition) { 
    return info.get(times.get(groupPosition)).get(childPosition); 
} 

@Override 
public long getGroupId(int groupPosition) { 
    return groupPosition; 
} 

@Override 
public long getChildId(int groupPosition, int childPosition) { 
    return childPosition; 
} 

@Override 
public boolean hasStableIds() { 
    return false; 
} 

@Override 
public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { 

    String times = (String) getGroup(groupPosition); 
    if(convertView == null) 
    { 
     LayoutInflater inflater = (LayoutInflater) context.getSystemService(context.LAYOUT_INFLATER_SERVICE); 
     convertView = inflater.inflate(R.layout.list_parent,null); 
    } 
    TextView txtParent = (TextView) convertView.findViewById(R.id.txtParent); 
    txtParent.setText(times); 

    return convertView; 
} 

@Override 
public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { 

    String info = (String) getChild(groupPosition,childPosition); 

    if(convertView == null) 
    { 
     LayoutInflater inflater = (LayoutInflater) context.getSystemService(context.LAYOUT_INFLATER_SERVICE); 
     convertView = inflater.inflate(R.layout.list_child,null); 
    } 
    TextView txtChild = (TextView) convertView.findViewById(R.id.txtChild); 
    txtChild.setText(info); 
    notifyDataSetChanged(); 

    return convertView; 
} 
@Override 
public boolean isChildSelectable(int i, int i1) { 
    return true; 
} 

}

である私の活動です短い読書の後、私はそれが実行時に不可能であることを知る必要があります。

私の質問は以下のとおりです。私は、配列の値を変更した場合

どのように私はリスト項目を更新することができますか? (私は本当にnotifyDataSetChanged();を理解することができません)

他の方法がありますか?

あなたが解決策を知っていれば私を助けてください。

私は通常、リストビューを更新する方法のおかげで、 M.テーラー

答えて

0

は、カスタムメソッドを使用することです。したがって、情報を直接更新するのではなく、リストア用のアダプタを設定するメソッドで更新してください。

void updateMyListView(foo, bar){ 
    updateInfoMap(); 
    expandableListView.setAdapter(listAdapter); 
+0

少し説明できますか? 私はそれを手に入れて私のケースに翻訳することはできません。 –

関連する問題