有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何在Android Studio中Expandablelistview的子布局中使用Listview

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

{"park":[
  {
  "serialno":"১ । ",
  "parkname":"রোজ গার্ডেন",
  "parkimage":"park_dhaka_rose_garden",
  "description":"বর্তমান নাম রশিদ মঞ্জিল । সুদৃশ্য নারী মূর্তি, আয়তাকার পুকুর, রশিদ মঞ্জিল, ফোয়ারা, সাত ধাপ বিশিষ্ট সিঁড়ি, উপবৃত্তাকার উদগত অপ্রশস্ত বেলকনি, আধাগোলাকার গম্ভুজ, ছত্রী নকশা, ঘুর্ণায়মান সিঁড়ি, রঙ্গিন কাঁচের অলঙ্করণ ইত্যাদি ।",
  "location":"ঢাকা সূত্রাপুর থানা এলাকাধীন ১৩ নং কে.এ. দাস লেন।",
  "timing":" প্রতিদিন সকাল ৯ টা থেকে সন্ধ্যা ৬ টা পর্যন্ত। রোজ গার্ডেনের কোন সাপ্তাহিক বন্ধ নেই। তবে শুটিং চলাকালীন সময়ে দর্শনার্থীদের প্রবেশ করতে দেওয়া হয় না।"
  },
  {
    "serialno":"২ । ",
    "parkname":"ওসমানী উদ্যান",
    "parkimage":"park_dhaka_osmani_uddan",
    "description":"মীর জুমলার কামান, জলাধার, ওয়াক ওয়ে, মহিলা এ্যারেনা, শিশু এ্যারেনা, স্বাধীনতা স্মৃতি স্তম্ভ, বৃক্ষের সমাহরোহ, বালু দ্বীপ ইত্যাদি।\n",
    "location":"ঢাকার গুলিস্তানে ঢাকা সিটি কর্পোরেশনের (নগর ভবন) বিপরীত পাশে এবং সচিবালয়ের পিছনে।",
    "timing":"গ্রীস্মকালে এটি সকাল ৫.০০ টা থেকে রাত ৯.০০ টা পর্যন্ত এবং শীতকালে সকাল ৬.০০ টা থেকে রাত ৮.০০ টা পর্যন্ত।"
  },
  {
    "serialno":"৩ । ",
    "parkname":"নন্দন পার্ক",
    "parkimage":"park_dhaka_nandan_park",
    "description":"আকর্ষনীয় রাইডগুলোর মধ্যে রয়েছে ক্যাবল কার, ওয়েব পুল, জিপ স্লাইড, রক ক্লাইমরিং, রিপলিং, মুন রেকার, কাটার পিলার, ওয়াটার কোস্টার, আইসল্যান্ড, প্যাডেল বোট প্রভৃতি। এছাড়া রয়েছে ওয়াটার ওয়ার্ল্ড ও ঘুরে বেড়ানোর অনেক জায়গা।",
    "location":"সাভার-চন্দ্রা মহাসড়কের পাশে, সাভার।",
    "timing":"প্রতিদিন সকাল ১০ টা থেকে সন্ধ্যা ৬ টা পর্যন্ত। শুক্রবার ও সকল বন্ধের দিনে সকাল ১০.০০ টা থেকে রাত ৯.০০ টা পর্যন্ত।"
  }

]
}

刺痛。xml

<resources>
    <string name="app_name">Address Guide</string>

    <string-array name="bd_division_list">
        <item> ঢাকা বিভাগ </item>
        <item> চট্টগ্রাম বিভাগ </item>
        <item> রাজশাহী বিভাগ </item>
        <item> খুলনা বিভাগ </item>
        <item> বরিশাল বিভাগ </item>
        <item> সিলেট বিভাগ </item>
        <item> রংপুর বিভাগ </item>
        <item> ময়মনসিংহ বিভাগ </item>
    </string-array>
</resources>

ExpandableListCustomAdapter。爪哇

package com.stieschool.addressguide;

import 安卓.content.Context;
import 安卓.view.LayoutInflater;
import 安卓.view.View;
import 安卓.view.ViewGroup;
import 安卓.widget.BaseExpandableListAdapter;
import 安卓.widget.ListAdapter;
import 安卓.widget.ListView;
import 安卓.widget.TextView;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

public class ExpandableListViewCustomAdapter extends BaseExpandableListAdapter {

    private Context context;
    private List<String> groupListHeader;
    HashMap<String,ArrayList<HashMap<String,String>>> childList;
    ListAdapter adapter;

    public ExpandableListViewCustomAdapter(Context context, List<String> groupListHeader, HashMap<String, ArrayList<HashMap<String, String>>> childList, ListAdapter adapter) {
        this.context = context;
        this.groupListHeader = groupListHeader;
        this.childList = childList;
        this.adapter = adapter;
    }

    @Override
    public int getGroupCount() {
        return groupListHeader.size();
    }

    @Override
    public int getChildrenCount(int i) {
        return childList.get(groupListHeader.get(i)).size();
    }

    @Override
    public Object getGroup(int i) {
        return groupListHeader.get(i);
    }

    @Override
    public Object getChild(int i, int i1) {

        return childList.get(groupListHeader.get(i)).get(i1);
    }

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

    @Override
    public long getChildId(int i, int i1) {
        return i1;
    }

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

    @Override
    public View getGroupView(int i, boolean b, View view, ViewGroup viewGroup) {
        String groupText = (String) getGroup(i);
        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        view = inflater.inflate(R.layout.park_item_group,null);
        TextView header = view.findViewById(R.id.parkDivisionNameGroupTextViewId);
        header.setText(groupText);
        return view;
    }

    @Override
    public View getChildView(int i, int i1, boolean b, View view, ViewGroup viewGroup) {
        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        view = inflater.inflate(R.layout.park_item_child,null);
        ListView parklistview = view.findViewById(R.id.parkItemListViewId);
        parklistview.setAdapter(adapter);
        return view;
    }

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

公园活动。爪哇

public class ParkActivity extends AppCompatActivity {

    ExpandableListView expandableListView;

    List<String> groupListHeader;
    HashMap<String,ArrayList<HashMap<String,String>>> childList;
    ListAdapter adapter;

    ExpandableListViewCustomAdapter customExpandableAdapter;
    ArrayList<HashMap<String,String>> listItems;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_park);

        expandableListView = findViewById(R.id.parkExpandableListViewId);


        try {
            JSONObject jsonObject=new JSONObject(loadJsonFile());
            JSONArray jsonArray=jsonObject.getJSONArray("park");
            HashMap<String,String> listItem;
            listItems=new ArrayList<>();

            for(int i=0; i<jsonArray.length();i++)
            {
                JSONObject obj=jsonArray.getJSONObject(i);
                String serialno=obj.getString("serialno");
                String parkname=obj.getString("parkname");
                String parkimagefilename=obj.getString("parkimage");
                String parkimage = Integer.toString(getApplicationContext().getResources().getIdentifier(parkimagefilename, "drawable", getApplicationContext().getPackageName()));
                String description=obj.getString("description");
                String location=obj.getString("location");
                String timing=obj.getString("timing");

                listItem=new HashMap<>();
                listItem.put("serialno",serialno);
                listItem.put("parkname",parkname);
                listItem.put("parkimage",parkimage);
                listItem.put("description",description);
                listItem.put("location",location);
                listItem.put("timing",timing);

                listItems.add(listItem);
            }
            adapter=new SimpleAdapter(this,listItems,R.layout.park_list_item_layout,
                    new String[]{"serialno","parkname","parkimage","description","location","timing"},
                    new int[]{R.id.parkSerialTextviewId,R.id.parkNameTextViewId,R.id.parkImageViewId,R.id.parkDescriptionId,R.id.parkLocationId,R.id.parkTimingId});


        } catch (JSONException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        prepareParkData();
        customExpandableAdapter = new ExpandableListViewCustomAdapter(this,groupListHeader,childList,adapter);
        expandableListView.setAdapter(customExpandableAdapter);

    }
    public String loadJsonFile() throws IOException {
        String json=null;
        InputStream inputStream=this.getAssets().open("park_dhaka.json");
        int size=inputStream.available();
        byte[] byteArray=new byte[size];
        inputStream.read(byteArray);
        inputStream.close();
        json=new String(byteArray, "UTF-8");
        return json;
    }
    public void prepareParkData()
    {
        String[] divisionList = getResources().getStringArray(R.array.bd_division_list);

        groupListHeader = new ArrayList<>();
        childList =new HashMap<>();

        for(int i=0; i<divisionList.length; i++)
        {
            groupListHeader.add(divisionList[i]);

            ArrayList<HashMap<String,String>> child = new ArrayList<>();

            if(i == 0)
            {
                for(int j=0; j<listItems.size(); j++)
                {
                    child.add(listItems.get(j));
                }
            }
            childList.put(groupListHeader.get(i),child);

        }
    }
}

停车场项目组。xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:安卓="http://schemas.安卓.com/apk/res/安卓"
    安卓:orientation="vertical"
    安卓:layout_width="match_parent"
    安卓:layout_height="match_parent">

    <TextView
        安卓:background="#6479ED"
        安卓:id="@+id/parkDivisionNameGroupTextViewId"
        安卓:layout_width="match_parent"
        安卓:layout_height="40dp"
        安卓:textSize="18sp"
        安卓:textStyle="bold"
        安卓:textColor="#ffff"
        安卓:gravity="center"
        安卓:layout_margin="5dp"/>

</LinearLayout>

把东西放在孩子身上。xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:安卓="http://schemas.安卓.com/apk/res/安卓"
    安卓:layout_width="match_parent"
    安卓:layout_height="match_parent">

    <ListView
        安卓:id="@+id/parkItemListViewId"
        安卓:layout_width="match_parent"
        安卓:layout_height="match_parent"/>

</LinearLayout>

问题是:只有json文件的第一项是重复的,而不是json文件的所有项 你能帮我解决这个问题吗

问候,, 托吉布


共 (2) 个答案

  1. # 1 楼答案

    备选案文1: 在你的公园里。xml,则必须为listview设置自定义高度。换行内容或匹配父项在此不起作用

     <ListView
        android:id="@+id/parkItemListViewId"
        android:layout_width="match_parent"
        android:layout_height="400dp"
        />
    

    选项2:像这样在listview中添加android:nestedScrollingEnabled=“true”属性

     <ListView
        android:id="@+id/parkItemListViewId"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:nestedScrollingEnabled="true"/>
    
  2. # 2 楼答案

    请尝试以下操作:

    一,。在listview中添加android:nestedScrollingEnabled="true"属性

    二,。在ExpandableListViewCustomAdapter中,getChildrenCount()如下所示:

    @Override
    public int getChildrenCount(int i) {
        //return childList.get(groupListHeader.get(i)).size();
        return 1;
    }