ねえみんな私は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.テーラー
少し説明できますか? 私はそれを手に入れて私のケースに翻訳することはできません。 –