如何在androidstudio中expandablelistview的子布局中使用listview

7z5jn7bk  于 2021-06-29  发布在  Java
关注(0)|答案(2)|浏览(292)

我想在expandablelistview的子布局中获取listview,子布局将从json文件中获取数据。我提供了检查您所需的代码。你能帮我怎么做吗。

  1. {"park":[
  2. {
  3. "serialno":"১ । ",
  4. "parkname":"রোজ গার্ডেন",
  5. "parkimage":"park_dhaka_rose_garden",
  6. "description":"বর্তমান নাম রশিদ মঞ্জিল । সুদৃশ্য নারী মূর্তি, আয়তাকার পুকুর, রশিদ মঞ্জিল, ফোয়ারা, সাত ধাপ বিশিষ্ট সিঁড়ি, উপবৃত্তাকার উদগত অপ্রশস্ত বেলকনি, আধাগোলাকার গম্ভুজ, ছত্রী নকশা, ঘুর্ণায়মান সিঁড়ি, রঙ্গিন কাঁচের অলঙ্করণ ইত্যাদি ।",
  7. "location":"ঢাকা সূত্রাপুর থানা এলাকাধীন ১৩ নং কে.এ. দাস লেন।",
  8. "timing":" প্রতিদিন সকাল ৯ টা থেকে সন্ধ্যা ৬ টা পর্যন্ত। রোজ গার্ডেনের কোন সাপ্তাহিক বন্ধ নেই। তবে শুটিং চলাকালীন সময়ে দর্শনার্থীদের প্রবেশ করতে দেওয়া হয় না।"
  9. },
  10. {
  11. "serialno":"২ । ",
  12. "parkname":"ওসমানী উদ্যান",
  13. "parkimage":"park_dhaka_osmani_uddan",
  14. "description":"মীর জুমলার কামান, জলাধার, ওয়াক ওয়ে, মহিলা এ্যারেনা, শিশু এ্যারেনা, স্বাধীনতা স্মৃতি স্তম্ভ, বৃক্ষের সমাহরোহ, বালু দ্বীপ ইত্যাদি।\n",
  15. "location":"ঢাকার গুলিস্তানে ঢাকা সিটি কর্পোরেশনের (নগর ভবন) বিপরীত পাশে এবং সচিবালয়ের পিছনে।",
  16. "timing":"গ্রীস্মকালে এটি সকাল ৫.০০ টা থেকে রাত ৯.০০ টা পর্যন্ত এবং শীতকালে সকাল ৬.০০ টা থেকে রাত ৮.০০ টা পর্যন্ত।"
  17. },
  18. {
  19. "serialno":"৩ । ",
  20. "parkname":"নন্দন পার্ক",
  21. "parkimage":"park_dhaka_nandan_park",
  22. "description":"আকর্ষনীয় রাইডগুলোর মধ্যে রয়েছে ক্যাবল কার, ওয়েব পুল, জিপ স্লাইড, রক ক্লাইমরিং, রিপলিং, মুন রেকার, কাটার পিলার, ওয়াটার কোস্টার, আইসল্যান্ড, প্যাডেল বোট প্রভৃতি। এছাড়া রয়েছে ওয়াটার ওয়ার্ল্ড ও ঘুরে বেড়ানোর অনেক জায়গা।",
  23. "location":"সাভার-চন্দ্রা মহাসড়কের পাশে, সাভার।",
  24. "timing":"প্রতিদিন সকাল ১০ টা থেকে সন্ধ্যা ৬ টা পর্যন্ত। শুক্রবার ও সকল বন্ধের দিনে সকাল ১০.০০ টা থেকে রাত ৯.০০ টা পর্যন্ত।"
  25. }
  26. ]
  27. }

stings.xml文件

  1. <resources>
  2. <string name="app_name">Address Guide</string>
  3. <string-array name="bd_division_list">
  4. <item> ঢাকা বিভাগ </item>
  5. <item> চট্টগ্রাম বিভাগ </item>
  6. <item> রাজশাহী বিভাগ </item>
  7. <item> খুলনা বিভাগ </item>
  8. <item> বরিশাল বিভাগ </item>
  9. <item> সিলেট বিভাগ </item>
  10. <item> রংপুর বিভাগ </item>
  11. <item> ময়মনসিংহ বিভাগ </item>
  12. </string-array>
  13. </resources>

expandablelistcustomadapter.java文件

  1. package com.stieschool.addressguide;
  2. import android.content.Context;
  3. import android.view.LayoutInflater;
  4. import android.view.View;
  5. import android.view.ViewGroup;
  6. import android.widget.BaseExpandableListAdapter;
  7. import android.widget.ListAdapter;
  8. import android.widget.ListView;
  9. import android.widget.TextView;
  10. import java.util.ArrayList;
  11. import java.util.HashMap;
  12. import java.util.List;
  13. public class ExpandableListViewCustomAdapter extends BaseExpandableListAdapter {
  14. private Context context;
  15. private List<String> groupListHeader;
  16. HashMap<String,ArrayList<HashMap<String,String>>> childList;
  17. ListAdapter adapter;
  18. public ExpandableListViewCustomAdapter(Context context, List<String> groupListHeader, HashMap<String, ArrayList<HashMap<String, String>>> childList, ListAdapter adapter) {
  19. this.context = context;
  20. this.groupListHeader = groupListHeader;
  21. this.childList = childList;
  22. this.adapter = adapter;
  23. }
  24. @Override
  25. public int getGroupCount() {
  26. return groupListHeader.size();
  27. }
  28. @Override
  29. public int getChildrenCount(int i) {
  30. return childList.get(groupListHeader.get(i)).size();
  31. }
  32. @Override
  33. public Object getGroup(int i) {
  34. return groupListHeader.get(i);
  35. }
  36. @Override
  37. public Object getChild(int i, int i1) {
  38. return childList.get(groupListHeader.get(i)).get(i1);
  39. }
  40. @Override
  41. public long getGroupId(int i) {
  42. return i;
  43. }
  44. @Override
  45. public long getChildId(int i, int i1) {
  46. return i1;
  47. }
  48. @Override
  49. public boolean hasStableIds() {
  50. return false;
  51. }
  52. @Override
  53. public View getGroupView(int i, boolean b, View view, ViewGroup viewGroup) {
  54. String groupText = (String) getGroup(i);
  55. LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
  56. view = inflater.inflate(R.layout.park_item_group,null);
  57. TextView header = view.findViewById(R.id.parkDivisionNameGroupTextViewId);
  58. header.setText(groupText);
  59. return view;
  60. }
  61. @Override
  62. public View getChildView(int i, int i1, boolean b, View view, ViewGroup viewGroup) {
  63. LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
  64. view = inflater.inflate(R.layout.park_item_child,null);
  65. ListView parklistview = view.findViewById(R.id.parkItemListViewId);
  66. parklistview.setAdapter(adapter);
  67. return view;
  68. }
  69. @Override
  70. public boolean isChildSelectable(int i, int i1) {
  71. return false;
  72. }
  73. }

公园活动.java

  1. public class ParkActivity extends AppCompatActivity {
  2. ExpandableListView expandableListView;
  3. List<String> groupListHeader;
  4. HashMap<String,ArrayList<HashMap<String,String>>> childList;
  5. ListAdapter adapter;
  6. ExpandableListViewCustomAdapter customExpandableAdapter;
  7. ArrayList<HashMap<String,String>> listItems;
  8. @Override
  9. protected void onCreate(Bundle savedInstanceState) {
  10. super.onCreate(savedInstanceState);
  11. setContentView(R.layout.activity_park);
  12. expandableListView = findViewById(R.id.parkExpandableListViewId);
  13. try {
  14. JSONObject jsonObject=new JSONObject(loadJsonFile());
  15. JSONArray jsonArray=jsonObject.getJSONArray("park");
  16. HashMap<String,String> listItem;
  17. listItems=new ArrayList<>();
  18. for(int i=0; i<jsonArray.length();i++)
  19. {
  20. JSONObject obj=jsonArray.getJSONObject(i);
  21. String serialno=obj.getString("serialno");
  22. String parkname=obj.getString("parkname");
  23. String parkimagefilename=obj.getString("parkimage");
  24. String parkimage = Integer.toString(getApplicationContext().getResources().getIdentifier(parkimagefilename, "drawable", getApplicationContext().getPackageName()));
  25. String description=obj.getString("description");
  26. String location=obj.getString("location");
  27. String timing=obj.getString("timing");
  28. listItem=new HashMap<>();
  29. listItem.put("serialno",serialno);
  30. listItem.put("parkname",parkname);
  31. listItem.put("parkimage",parkimage);
  32. listItem.put("description",description);
  33. listItem.put("location",location);
  34. listItem.put("timing",timing);
  35. listItems.add(listItem);
  36. }
  37. adapter=new SimpleAdapter(this,listItems,R.layout.park_list_item_layout,
  38. new String[]{"serialno","parkname","parkimage","description","location","timing"},
  39. new int[]{R.id.parkSerialTextviewId,R.id.parkNameTextViewId,R.id.parkImageViewId,R.id.parkDescriptionId,R.id.parkLocationId,R.id.parkTimingId});
  40. } catch (JSONException e) {
  41. e.printStackTrace();
  42. } catch (IOException e) {
  43. e.printStackTrace();
  44. }
  45. prepareParkData();
  46. customExpandableAdapter = new ExpandableListViewCustomAdapter(this,groupListHeader,childList,adapter);
  47. expandableListView.setAdapter(customExpandableAdapter);
  48. }
  49. public String loadJsonFile() throws IOException {
  50. String json=null;
  51. InputStream inputStream=this.getAssets().open("park_dhaka.json");
  52. int size=inputStream.available();
  53. byte[] byteArray=new byte[size];
  54. inputStream.read(byteArray);
  55. inputStream.close();
  56. json=new String(byteArray, "UTF-8");
  57. return json;
  58. }
  59. public void prepareParkData()
  60. {
  61. String[] divisionList = getResources().getStringArray(R.array.bd_division_list);
  62. groupListHeader = new ArrayList<>();
  63. childList =new HashMap<>();
  64. for(int i=0; i<divisionList.length; i++)
  65. {
  66. groupListHeader.add(divisionList[i]);
  67. ArrayList<HashMap<String,String>> child = new ArrayList<>();
  68. if(i == 0)
  69. {
  70. for(int j=0; j<listItems.size(); j++)
  71. {
  72. child.add(listItems.get(j));
  73. }
  74. }
  75. childList.put(groupListHeader.get(i),child);
  76. }
  77. }
  78. }

park\u item\u group.xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:orientation="vertical"
  4. android:layout_width="match_parent"
  5. android:layout_height="match_parent">
  6. <TextView
  7. android:background="#6479ED"
  8. android:id="@+id/parkDivisionNameGroupTextViewId"
  9. android:layout_width="match_parent"
  10. android:layout_height="40dp"
  11. android:textSize="18sp"
  12. android:textStyle="bold"
  13. android:textColor="#ffff"
  14. android:gravity="center"
  15. android:layout_margin="5dp"/>
  16. </LinearLayout>

park\u item\u child.xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout
  3. xmlns:android="http://schemas.android.com/apk/res/android"
  4. android:layout_width="match_parent"
  5. android:layout_height="match_parent">
  6. <ListView
  7. android:id="@+id/parkItemListViewId"
  8. android:layout_width="match_parent"
  9. android:layout_height="match_parent"/>
  10. </LinearLayout>

问题是:只有json文件的第一项是重复的,不是所有json文件的项都是重复的,你能帮我解决这个问题吗?
你好,托吉布

c3frrgcw

c3frrgcw1#

请尝试以下操作:
1.添加 android:nestedScrollingEnabled="true" 属性。
2.在expandablelistviewcustomadapter中,getchildrencount()如下:

  1. @Override
  2. public int getChildrenCount(int i) {
  3. //return childList.get(groupListHeader.get(i)).size();
  4. return 1;
  5. }
643ylb08

643ylb082#

选项1:在park\u item\u child.xml中,必须为listview设置自定义高度。 Package 内容或匹配父项在此处不起作用。

  1. <ListView
  2. android:id="@+id/parkItemListViewId"
  3. android:layout_width="match_parent"
  4. android:layout_height="400dp"
  5. />

选项2:添加android:nestedscrollingenabled=listview中的“true”属性,

  1. <ListView
  2. android:id="@+id/parkItemListViewId"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent"
  5. android:nestedScrollingEnabled="true"/>

相关问题