具有 JSON 数据的 ExpandableListView
ExpandableListView with JSON data
我正在尝试展示联赛冠军的常设 table 组。
我有 3 个组:A 组、B 组、C 组。
对于每个组,我有 4 支球队:Team1、Team2、Team3、Team4 以及他们的积分和比赛场次。
我已获取数据 JSON 并成功将 ArrayList 中的数据传递给 ExpandableListView 适配器。
我在 groupview 方法上扩大了父行布局,因此它显示 GROUP A、GROUP B、GROUP C,如下所示:
现在在小组新闻中,我想夸大这个自定义布局,它显示 4 支球队中每支球队的 id、球队名称、比赛、得分:
这是我的模型class :
public class Standings_data {
String id;
String groupid;
String team;
public String getTeam() {
return team;
}
public void setTeam(String team) {
this.team = team;
}
public String getGroupid() {
return groupid;
}
public void setGroupid(String groupid) {
this.groupid = groupid;
}
String p;
String pts;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getP() {
return p;
}
public void setP(String p) {
this.p = p;
}
public String getPts() {
return pts;
}
public void setPts(String pts) {
this.pts = pts;
}
}
我的片段class:
public class StandingFragment extends Fragment implements ConnectivityReceiver.ConnectivityReceiverListener,
SwipeRefreshLayout.OnRefreshListener{
public CoordinatorLayout coordinatorLayout;
public boolean isConnected;
public static final String NA = "NA";
public RecyclerView recycler_post;
public PostAdapter7 adapter;
public ProgressDialog progressDialog;
ArrayList<Standings_data> post_array = new ArrayList<>();
public SwipeRefreshLayout swipeRefreshLayout;
InterstitialAd mInterstitialAd;
private InterstitialAd interstitial;
public ExpandableListView elv;
@Override
public void onPrepareOptionsMenu(Menu menu) {
super.onPrepareOptionsMenu(menu);
}
public StandingFragment() {
// Required empty public constructor
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
checkConnectivity();
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View v=inflater.inflate(R.layout.fragment_standing,null);
// toolbar = (Toolbar) v.findViewById(R.id.toolbar_viewpager);
// searchToolbar = (Toolbar) v.findViewById(R.id.toolbar_search);
coordinatorLayout = (CoordinatorLayout) v.findViewById(R.id.coordinatorLayout);
elv = (ExpandableListView)v.findViewById(R.id.elv);
elv.setOnGroupExpandListener(onGroupExpandListenser);
swipeRefreshLayout = (SwipeRefreshLayout) v.findViewById(R.id.swipe_refresh);
swipeRefreshLayout.setOnRefreshListener(this);
swipeRefreshLayout.setColorSchemeResources(R.color.colorGreen,R.color.black,R.color.colorRed);
try {
getData();
} catch (Exception e) {
e.printStackTrace();
}
return v;
}
ExpandableListView.OnGroupExpandListener onGroupExpandListenser = new ExpandableListView.OnGroupExpandListener() {
int previousGroup =-1;
@Override
public void onGroupExpand(int groupPosition) {
if(groupPosition!= previousGroup)
elv.collapseGroup(previousGroup);
previousGroup = groupPosition;
}
};
public void getData() throws Exception {
if (checkConnectivity()){
try {
swipeRefreshLayout.setRefreshing(true);
getAllPosts();
} catch (Exception e) {
e.printStackTrace();
}
}else {
swipeRefreshLayout.setRefreshing(false);
// getAllPosts();
showSnack();
}
}
public boolean checkConnectivity() {
return ConnectivityReceiver.isConnected();
}
public void showSnack() {
Snackbar.make(coordinatorLayout, getString(R.string.no_internet_connected), Snackbar.LENGTH_INDEFINITE)
.setAction(getString(R.string.settings), new View.OnClickListener() {
@Override
public void onClick(View view) {
startActivity(new Intent(Settings.ACTION_WIRELESS_SETTINGS));
}
}).setActionTextColor(Color.RED)
.show();
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.menu_main, menu);
super.onCreateOptionsMenu(menu,inflater);
}
@Override
public void onResume() {
super.onResume();
// Toast.makeText(getContext(),"u have resumed the app",Toast.LENGTH_SHORT).show();
AppController.getInstance().setConnectivityReceiver(this);
}
@Override
public void onRefresh() {
try {
// Toast.makeText(getContext(),"u have refreshed the app",Toast.LENGTH_SHORT).show();
//when u swipe the app..the getdata method is invoked !
getData();
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void onPause() {
super.onPause();
// Toast.makeText(getContext(),"u have paused the app",Toast.LENGTH_SHORT).show();
}
@Override
public void onNetworkChange(boolean inConnected) {
this.isConnected = inConnected;
// Toast.makeText(getContext(),"the app network have been changed",Toast.LENGTH_SHORT).show();
}
public void getAllPosts() throws Exception{
String TAG = "POSTS_STANDINGS";
String url = Constants.STANDINGS_URL;
StringRequest jsonObjectRequest = new StringRequest(Request.Method.GET, url, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Log.i("response_standings", response);
parseJson(response);
progressDialog.dismiss();
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
try {
progressDialog.dismiss();
swipeRefreshLayout.setRefreshing(false);
Log.e("error", "" +error.getMessage());
}catch (NullPointerException e)
{
swipeRefreshLayout.setRefreshing(false);
e.printStackTrace();
}
}
});
AppController.getInstance().addToRequestQueue(jsonObjectRequest, TAG);
progressDialog = new ProgressDialog(getActivity());
progressDialog.setMessage("الرجاء الانتظار..");
progressDialog.show();
}
public void parseJson(String response){
try {
JSONArray array = new JSONArray(response);
JSONObject jsonObject =null;
post_array.clear();
Standings_data p;
for(int i=0 ; i<array.length() ; i++)
{
jsonObject=array.getJSONObject(i);
String id_team=jsonObject.getString("id_team");
String groupid= jsonObject.getString("name");
String played=jsonObject.getString("played");
String points=jsonObject.getString("points");
p = new Standings_data();
p.setId(id_team);
p.setGroupid(groupid);
p.setP(played);
p.setPts(points);
post_array.add(p);
//realmHelper.save(p);
}
}
catch (JSONException e) {
swipeRefreshLayout.setRefreshing(false);
e.printStackTrace();
//Log.d("error", e.getMessage());
}
adapter = new PostAdapter7(getContext(),post_array );
elv.setAdapter(adapter);
swipeRefreshLayout.setRefreshing(false);
}
}
我的适配器class:
public class PostAdapter7 extends BaseExpandableListAdapter{
public Context mContext;
public ArrayList<Standings_data> filtered_items = new ArrayList<>();
// ItemFilter mFilters = new ItemFilter();
public PostAdapter7(Context mContext, ArrayList<Standings_data> postList) {
this.mContext = mContext;
this.filtered_items = postList;
}
@Override
public int getGroupCount() {
return filtered_items.size();
}
@Override
public int getChildrenCount(int groupPosition) {
return 0;
// not sure about the return value
}
@Override
public Object getGroup(int groupPosition) {
return null;
// not sure about the return value
}
@Override
public Object getChild(int groupPosition, int childPosition) {
return null;
// not sure about the return value
}
@Override
public long getGroupId(int i) {
return i;
}
@Override
public long getChildId(int i, int i2) {
return 0;
}
@Override
public boolean hasStableIds() {
return false;
}
@Override
public View getGroupView(int i, boolean isExpanded, View view, ViewGroup parent) {
final Standings_data post = filtered_items.get(i);
if(view ==null)
{
LayoutInflater inflater =(LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = inflater.inflate(R.layout.parent_row,null);
}
TextView groupID = (TextView)view.findViewById(R.id.txtgroupid);
groupID.setText(post.getGroupid());
return view;
}
@Override
public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View view, ViewGroup parent) {
// i have no idea what to do here so the four team are displayed from arraylist for each group
return view; }
@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
return false;
}
}
如何为每个组(A、B、C、D)显示包含数据的数组列表中对应的团队?
为了说得更清楚,我正在尝试做同样的事情:
更新:这是我的 json 回复
[{"0":"1","id_team":"1","1":"TEAM 1","name":"TEAM 1","2" :"3","played":"3","3":"9","points":"9"},{"0":"2","id_team":" 2","1":"TEAM 2","name":"TEAM 2","2":"3","played":"3","3":"1" ,"points":"1"},{"0":"3","id_team":"3","1":"TEAM3","name":"TEAM3","2":"2","played":"2","3":"6","points":"6"}]
这是一个简单的测试用的
据我了解,您正在为您的主要组(A 组、B 组、C 组)获取 childs 的数据..
所以你的 post_array 是用来保存团队数据的,所以每个组都有一个 post_array child 队
您必须为您的组(A 组、B 组、C 组)创建一个 arrayList
和 HashMap 用于您的 childs(每个组的团队)哈希映射包含您 post_array
示例:
把它放在 onCreate 的顶部外面
List<String> listDataGroup = new ArrayList<String>();
HashMap<String, ArrayList<Standings_data>> listDataTeams = new HashMap<String, ArrayList<Standings_data>>();
然后在您的 parseJson() 方法中将您的静态组添加到组列表并在 hashMap
上填充您的团队
// Adding groups data
listDataGroup.add("Group A");
listDataGroup.add("Group B");
listDataGroup.add("Group C");
并且在你将数据添加到你的 post_array 之后你的 for 循环
//adding childs data (Teams) like this
listDataTeams.put(listDataGroup.get(0), post_array); // Group, Child data(Teams)
listDataTeams.put(listDataGroup.get(1), post_array);
listDataTeams.put(listDataGroup.get(2), post_array);
注意前面的代码将为所有组添加相同的团队
然后将 (listDataGroup, listDataTeams) 传递给您的可扩展列表适配器,而不是传递 post_array
然后在你的适配器上做这个
public class PostAdapter7 extends BaseExpandableListAdapter{
public Context mContext;
List<String> listDataGroup ;
HashMap<String, ArrayList<Standings_data>> listDataTeams;
// ItemFilter mFilters = new ItemFilter();
public PostAdapter7(Context mContext, List<String> listDataGroup , HashMap<String, ArrayList<Standings_data>> listDataTeams) {
this.mContext = mContext;
this.listDataGroup = listDataGroup;
this.listDataTeams = listDataTeams;
}
@Override
public int getGroupCount() {
return listDataGroup.size();
}
@Override
public int getChildrenCount(int groupPosition) {
return this.listDataTeams.get(this.listDataGroup.get(groupPosition)).size();
}
@Override
public Object getGroup(int groupPosition) {
return listDataGroup.get(groupPosition);
}
@Override
public Object getChild(int groupPosition, int childPosition) {
return this.listDataTeams.get(this.listDataGroup.get(groupPosition)).get();
}
@Override
public long getGroupId(int i) {
return i;
}
@Override
public long getChildId(int i, int i2) {
return i2;
}
@Override
public boolean hasStableIds() {
return false;
}
@Override
public View getGroupView(int i, boolean isExpanded, View view, ViewGroup parent) {
// this is for inflate Groups view and display data for it from listDataGroup array list
if(view ==null)
{
LayoutInflater inflater =(LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = inflater.inflate(R.layout.parent_row,null);
}
//here display your data for each Group
return view;
}
@Override
public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View view, ViewGroup parent) {
// this is for inflate childs (Team view replace child_row with yours) and display data for it from listDataTeams HashMap
if(view ==null)
{
LayoutInflater inflater =(LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = inflater.inflate(R.layout.child_row,null);
}
//here get your data for each team and set it to your textview
final Standings_data teamData = (Standings_data)getChild(groupPosition,childPosition);
//and then in your tv display data
yourTextView.setText(teamData.getGroupid());
return view;
}
@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
return false;
}
}
我希望你理解这将...如果有问题让我知道
如果你想要一个很好的教程来理解 ExpandableListViw 那么
试试这个 Tutorial
更新
您可以使用此方法对您的团队列表进行排序
Collections.sort(post_array, new Comparator<Standings_data>(){
public int compare(Standings_data s1, Standings_data s2) {
return s1.getpts().compareToIgnoreCase(s2.getPts());
}
});
Collections.reverse(post_array);
您在将 post_array 添加到 listDataTeams 哈希映射
之前放置此代码
我正在尝试展示联赛冠军的常设 table 组。
我有 3 个组:A 组、B 组、C 组。
对于每个组,我有 4 支球队:Team1、Team2、Team3、Team4 以及他们的积分和比赛场次。
我已获取数据 JSON 并成功将 ArrayList 中的数据传递给 ExpandableListView 适配器。
我在 groupview 方法上扩大了父行布局,因此它显示 GROUP A、GROUP B、GROUP C,如下所示:
现在在小组新闻中,我想夸大这个自定义布局,它显示 4 支球队中每支球队的 id、球队名称、比赛、得分:
这是我的模型class :
public class Standings_data {
String id;
String groupid;
String team;
public String getTeam() {
return team;
}
public void setTeam(String team) {
this.team = team;
}
public String getGroupid() {
return groupid;
}
public void setGroupid(String groupid) {
this.groupid = groupid;
}
String p;
String pts;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getP() {
return p;
}
public void setP(String p) {
this.p = p;
}
public String getPts() {
return pts;
}
public void setPts(String pts) {
this.pts = pts;
}
}
我的片段class:
public class StandingFragment extends Fragment implements ConnectivityReceiver.ConnectivityReceiverListener,
SwipeRefreshLayout.OnRefreshListener{
public CoordinatorLayout coordinatorLayout;
public boolean isConnected;
public static final String NA = "NA";
public RecyclerView recycler_post;
public PostAdapter7 adapter;
public ProgressDialog progressDialog;
ArrayList<Standings_data> post_array = new ArrayList<>();
public SwipeRefreshLayout swipeRefreshLayout;
InterstitialAd mInterstitialAd;
private InterstitialAd interstitial;
public ExpandableListView elv;
@Override
public void onPrepareOptionsMenu(Menu menu) {
super.onPrepareOptionsMenu(menu);
}
public StandingFragment() {
// Required empty public constructor
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
checkConnectivity();
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View v=inflater.inflate(R.layout.fragment_standing,null);
// toolbar = (Toolbar) v.findViewById(R.id.toolbar_viewpager);
// searchToolbar = (Toolbar) v.findViewById(R.id.toolbar_search);
coordinatorLayout = (CoordinatorLayout) v.findViewById(R.id.coordinatorLayout);
elv = (ExpandableListView)v.findViewById(R.id.elv);
elv.setOnGroupExpandListener(onGroupExpandListenser);
swipeRefreshLayout = (SwipeRefreshLayout) v.findViewById(R.id.swipe_refresh);
swipeRefreshLayout.setOnRefreshListener(this);
swipeRefreshLayout.setColorSchemeResources(R.color.colorGreen,R.color.black,R.color.colorRed);
try {
getData();
} catch (Exception e) {
e.printStackTrace();
}
return v;
}
ExpandableListView.OnGroupExpandListener onGroupExpandListenser = new ExpandableListView.OnGroupExpandListener() {
int previousGroup =-1;
@Override
public void onGroupExpand(int groupPosition) {
if(groupPosition!= previousGroup)
elv.collapseGroup(previousGroup);
previousGroup = groupPosition;
}
};
public void getData() throws Exception {
if (checkConnectivity()){
try {
swipeRefreshLayout.setRefreshing(true);
getAllPosts();
} catch (Exception e) {
e.printStackTrace();
}
}else {
swipeRefreshLayout.setRefreshing(false);
// getAllPosts();
showSnack();
}
}
public boolean checkConnectivity() {
return ConnectivityReceiver.isConnected();
}
public void showSnack() {
Snackbar.make(coordinatorLayout, getString(R.string.no_internet_connected), Snackbar.LENGTH_INDEFINITE)
.setAction(getString(R.string.settings), new View.OnClickListener() {
@Override
public void onClick(View view) {
startActivity(new Intent(Settings.ACTION_WIRELESS_SETTINGS));
}
}).setActionTextColor(Color.RED)
.show();
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.menu_main, menu);
super.onCreateOptionsMenu(menu,inflater);
}
@Override
public void onResume() {
super.onResume();
// Toast.makeText(getContext(),"u have resumed the app",Toast.LENGTH_SHORT).show();
AppController.getInstance().setConnectivityReceiver(this);
}
@Override
public void onRefresh() {
try {
// Toast.makeText(getContext(),"u have refreshed the app",Toast.LENGTH_SHORT).show();
//when u swipe the app..the getdata method is invoked !
getData();
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void onPause() {
super.onPause();
// Toast.makeText(getContext(),"u have paused the app",Toast.LENGTH_SHORT).show();
}
@Override
public void onNetworkChange(boolean inConnected) {
this.isConnected = inConnected;
// Toast.makeText(getContext(),"the app network have been changed",Toast.LENGTH_SHORT).show();
}
public void getAllPosts() throws Exception{
String TAG = "POSTS_STANDINGS";
String url = Constants.STANDINGS_URL;
StringRequest jsonObjectRequest = new StringRequest(Request.Method.GET, url, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Log.i("response_standings", response);
parseJson(response);
progressDialog.dismiss();
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
try {
progressDialog.dismiss();
swipeRefreshLayout.setRefreshing(false);
Log.e("error", "" +error.getMessage());
}catch (NullPointerException e)
{
swipeRefreshLayout.setRefreshing(false);
e.printStackTrace();
}
}
});
AppController.getInstance().addToRequestQueue(jsonObjectRequest, TAG);
progressDialog = new ProgressDialog(getActivity());
progressDialog.setMessage("الرجاء الانتظار..");
progressDialog.show();
}
public void parseJson(String response){
try {
JSONArray array = new JSONArray(response);
JSONObject jsonObject =null;
post_array.clear();
Standings_data p;
for(int i=0 ; i<array.length() ; i++)
{
jsonObject=array.getJSONObject(i);
String id_team=jsonObject.getString("id_team");
String groupid= jsonObject.getString("name");
String played=jsonObject.getString("played");
String points=jsonObject.getString("points");
p = new Standings_data();
p.setId(id_team);
p.setGroupid(groupid);
p.setP(played);
p.setPts(points);
post_array.add(p);
//realmHelper.save(p);
}
}
catch (JSONException e) {
swipeRefreshLayout.setRefreshing(false);
e.printStackTrace();
//Log.d("error", e.getMessage());
}
adapter = new PostAdapter7(getContext(),post_array );
elv.setAdapter(adapter);
swipeRefreshLayout.setRefreshing(false);
}
}
我的适配器class:
public class PostAdapter7 extends BaseExpandableListAdapter{
public Context mContext;
public ArrayList<Standings_data> filtered_items = new ArrayList<>();
// ItemFilter mFilters = new ItemFilter();
public PostAdapter7(Context mContext, ArrayList<Standings_data> postList) {
this.mContext = mContext;
this.filtered_items = postList;
}
@Override
public int getGroupCount() {
return filtered_items.size();
}
@Override
public int getChildrenCount(int groupPosition) {
return 0;
// not sure about the return value
}
@Override
public Object getGroup(int groupPosition) {
return null;
// not sure about the return value
}
@Override
public Object getChild(int groupPosition, int childPosition) {
return null;
// not sure about the return value
}
@Override
public long getGroupId(int i) {
return i;
}
@Override
public long getChildId(int i, int i2) {
return 0;
}
@Override
public boolean hasStableIds() {
return false;
}
@Override
public View getGroupView(int i, boolean isExpanded, View view, ViewGroup parent) {
final Standings_data post = filtered_items.get(i);
if(view ==null)
{
LayoutInflater inflater =(LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = inflater.inflate(R.layout.parent_row,null);
}
TextView groupID = (TextView)view.findViewById(R.id.txtgroupid);
groupID.setText(post.getGroupid());
return view;
}
@Override
public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View view, ViewGroup parent) {
// i have no idea what to do here so the four team are displayed from arraylist for each group
return view; }
@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
return false;
}
}
如何为每个组(A、B、C、D)显示包含数据的数组列表中对应的团队?
为了说得更清楚,我正在尝试做同样的事情:
更新:这是我的 json 回复
[{"0":"1","id_team":"1","1":"TEAM 1","name":"TEAM 1","2" :"3","played":"3","3":"9","points":"9"},{"0":"2","id_team":" 2","1":"TEAM 2","name":"TEAM 2","2":"3","played":"3","3":"1" ,"points":"1"},{"0":"3","id_team":"3","1":"TEAM3","name":"TEAM3","2":"2","played":"2","3":"6","points":"6"}]
这是一个简单的测试用的
据我了解,您正在为您的主要组(A 组、B 组、C 组)获取 childs 的数据..
所以你的 post_array 是用来保存团队数据的,所以每个组都有一个 post_array child 队
您必须为您的组(A 组、B 组、C 组)创建一个 arrayList
和 HashMap 用于您的 childs(每个组的团队)哈希映射包含您 post_array
示例:
把它放在 onCreate 的顶部外面
List<String> listDataGroup = new ArrayList<String>();
HashMap<String, ArrayList<Standings_data>> listDataTeams = new HashMap<String, ArrayList<Standings_data>>();
然后在您的 parseJson() 方法中将您的静态组添加到组列表并在 hashMap
上填充您的团队// Adding groups data
listDataGroup.add("Group A");
listDataGroup.add("Group B");
listDataGroup.add("Group C");
并且在你将数据添加到你的 post_array 之后你的 for 循环
//adding childs data (Teams) like this
listDataTeams.put(listDataGroup.get(0), post_array); // Group, Child data(Teams)
listDataTeams.put(listDataGroup.get(1), post_array);
listDataTeams.put(listDataGroup.get(2), post_array);
注意前面的代码将为所有组添加相同的团队
然后将 (listDataGroup, listDataTeams) 传递给您的可扩展列表适配器,而不是传递 post_array
然后在你的适配器上做这个
public class PostAdapter7 extends BaseExpandableListAdapter{
public Context mContext;
List<String> listDataGroup ;
HashMap<String, ArrayList<Standings_data>> listDataTeams;
// ItemFilter mFilters = new ItemFilter();
public PostAdapter7(Context mContext, List<String> listDataGroup , HashMap<String, ArrayList<Standings_data>> listDataTeams) {
this.mContext = mContext;
this.listDataGroup = listDataGroup;
this.listDataTeams = listDataTeams;
}
@Override
public int getGroupCount() {
return listDataGroup.size();
}
@Override
public int getChildrenCount(int groupPosition) {
return this.listDataTeams.get(this.listDataGroup.get(groupPosition)).size();
}
@Override
public Object getGroup(int groupPosition) {
return listDataGroup.get(groupPosition);
}
@Override
public Object getChild(int groupPosition, int childPosition) {
return this.listDataTeams.get(this.listDataGroup.get(groupPosition)).get();
}
@Override
public long getGroupId(int i) {
return i;
}
@Override
public long getChildId(int i, int i2) {
return i2;
}
@Override
public boolean hasStableIds() {
return false;
}
@Override
public View getGroupView(int i, boolean isExpanded, View view, ViewGroup parent) {
// this is for inflate Groups view and display data for it from listDataGroup array list
if(view ==null)
{
LayoutInflater inflater =(LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = inflater.inflate(R.layout.parent_row,null);
}
//here display your data for each Group
return view;
}
@Override
public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View view, ViewGroup parent) {
// this is for inflate childs (Team view replace child_row with yours) and display data for it from listDataTeams HashMap
if(view ==null)
{
LayoutInflater inflater =(LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = inflater.inflate(R.layout.child_row,null);
}
//here get your data for each team and set it to your textview
final Standings_data teamData = (Standings_data)getChild(groupPosition,childPosition);
//and then in your tv display data
yourTextView.setText(teamData.getGroupid());
return view;
}
@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
return false;
}
}
我希望你理解这将...如果有问题让我知道
如果你想要一个很好的教程来理解 ExpandableListViw 那么 试试这个 Tutorial
更新
您可以使用此方法对您的团队列表进行排序
Collections.sort(post_array, new Comparator<Standings_data>(){
public int compare(Standings_data s1, Standings_data s2) {
return s1.getpts().compareToIgnoreCase(s2.getPts());
}
});
Collections.reverse(post_array);
您在将 post_array 添加到 listDataTeams 哈希映射
之前放置此代码