任何人都可以帮助我...我正在尝试动态实现可扩展的listview,并使用其中一个教程(Androidhive)来熟悉它。我的问题是我从parse.com获取数据,我想将其动态加载到可扩展的列表视图中。首先,我从解析到每个类型分类的对象的数据,然后我想将其转换为可扩展的列表视图。我被困在的是我不知道如何向孩子传递多于1个对象的适配器(我对每个孩子有3个文本视图)。从下面的例子中我得到了主要道路的数据,仅从孩子身上看,但我仍然需要获得2个额外的值,我不知道如何实现。
下面是我的asynctask代码:
private class RemoteDataTask extends AsyncTask<Void, Void, Void> {
@Override
protected void onPreExecute() {
super.onPreExecute();
// Create a progressdialog
mProgressDialog = new ProgressDialog(MainActivity.this);
// Set progressdialog title
// mProgressDialog.setTitle("Loading...");
// Set progressdialog message
mProgressDialog.setMessage("wait please ...");
mProgressDialog.setIndeterminate(false);
// Show progressdialog
mProgressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
mProgressDialog.setCancelable(false);
mProgressDialog.show();
}
@Override
protected Void doInBackground(Void... params) {
// Create the array
listviewPostsGet = new ArrayList<listviewPostsGet>();
ParseQuery<ParseObject> query = new ParseQuery<ParseObject>(
"MainRoadsList");
try {
ob = query.find();
for (ParseObject country : ob) {
listviewPostsGet map = new listviewPostsGet();
map.setmainroad(((String) country.get("mainroad")));
map.setmainroadfrom(((String) country.get("from")));
map.setmainroadto((String) country.get("to"));
map.setcategory(((String) country.get("mainroad")));
listviewPostsGet.add(map);
listDataHeader = new ArrayList<String>();
listDataChild = new HashMap<String, List<String>>();
String check = "";
for (int i = 0; i < listviewPostsGet.size(); i++)
{
String XX = listviewPostsGet.get(i).getcategory()
.toString();
if (!check.contentEquals(XX.toString())) {
listDataHeader.add(XX);
check = XX;
List<String> TTT = new ArrayList<String>();
for (int j = 0; j < listviewPostsGet.size(); j++) {
String YY = listviewPostsGet.get(j).getcategory().toString();
if (YY.contentEquals(XX.toString()))
{
TTT.add(listviewPostsGet.get(j).getmainroadfrom().toString()+" "+listviewPostsGet.get(j).getmainroadto().toString());
listDataChild.put(XX, TTT);
}
}
}
}
}
}
catch (ParseException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Void result) {
listAdapter = new ExpandableListAdapter1(MainActivity.this,
listDataHeader, listDataChild);
// setting list adapter
expListView.setAdapter(listAdapter);
mProgressDialog.dismiss();
}
}
此处还有适配器:
public class ExpandableListAdapter1 extends BaseExpandableListAdapter {
private Context _context;
private List<String> _listDataHeader; // header titles
// child data in format of header title, child title
private HashMap<String, List<String>> _listDataChild;
public ExpandableListAdapter1(Context context, List<String> listDataHeader,
HashMap<String, List<String>> listDataChild ) {
this._context = context;
this._listDataHeader = listDataHeader;
this._listDataChild = listDataChild;
}
public Object getChild(int groupPosition, int childPosititon) {
return this._listDataChild.get(this._listDataHeader.get(groupPosition).toString())
.get(childPosititon);
}
public long getChildId(int groupPosition, int childPosition) {
return childPosition;
}
public View getChildView(int groupPosition, final int childPosition,
boolean isLastChild, View convertView, ViewGroup parent) {
final String childText = (String) getChild(groupPosition, childPosition);
if (convertView == null) {
LayoutInflater infalInflater = (LayoutInflater) this._context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = infalInflater.inflate(R.layout.mainlayout, null);
}
TextView from = (TextView) convertView
.findViewById(R.id.fromroad);
TextView to = (TextView) convertView
.findViewById(R.id.toroad);
from.setText(childText);
return convertView;
}
public int getChildrenCount(int groupPosition) {
return this._listDataChild.get(this._listDataHeader.get(groupPosition))
.size();
}
public Object getGroup(int groupPosition) {
return this._listDataHeader.get(groupPosition);
}
public int getGroupCount() {
return this._listDataHeader.size();
}
public long getGroupId(int groupPosition) {
return groupPosition;
}
public View getGroupView(int groupPosition, boolean isExpanded,
View convertView, ViewGroup parent) {
String headerTitle = (String) getGroup(groupPosition);
if (convertView == null) {
LayoutInflater infalInflater = (LayoutInflater) this._context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = infalInflater.inflate(R.layout.list_group, null);
}
TextView lblListHeader = (TextView) convertView
.findViewById(R.id.lblListHeader);
lblListHeader.setTypeface(null, Typeface.BOLD);
lblListHeader.setText(headerTitle);
return convertView;
}
public boolean hasStableIds() {
return false;
}
public boolean isChildSelectable(int groupPosition, int childPosition) {
return true;
}
}
编辑:
要清楚,我的问题是我想将listviewPostsGet中的3个值分配给可扩展的listview子项,而我实际可以实现的是只传递1个值,即“主路从”到TTT数组列表然后将其分配给适配器上的相应textview。