我想使用改装库从json在ExpandableListView中加载问题和答案。我不知道如何设置子菜单。找到我的解决方案。这是我正在使用的两个模型类。
公共类CatItem {
@SerializedName("stock_division_id")
private String stockDivisionId;
@SerializedName("stock_category_name")
private String stockCategoryName;
@SerializedName("stock_category_id")
private String stockCategoryId;
@SerializedName("stock_category_status")
private String stockCategoryStatus;
@SerializedName("created_date")
private String createdDate;
@SerializedName("updated_date")
private String updatedDate;
public void setStockDivisionId(String stockDivisionId){
this.stockDivisionId = stockDivisionId;
}
public String getStockDivisionId(){
return stockDivisionId;
}
public void setStockCategoryName(String stockCategoryName){
this.stockCategoryName = stockCategoryName;
}
public String getStockCategoryName(){
return stockCategoryName;
}
public void setStockCategoryId(String stockCategoryId){
this.stockCategoryId = stockCategoryId;
}
public String getStockCategoryId(){
return stockCategoryId;
}
public void setStockCategoryStatus(String stockCategoryStatus){
this.stockCategoryStatus = stockCategoryStatus;
}
public String getStockCategoryStatus(){
return stockCategoryStatus;
}
public void setCreatedDate(String createdDate){
this.createdDate = createdDate;
}
public String getCreatedDate(){
return createdDate;
}
public void setUpdatedDate(String updatedDate){
this.updatedDate = updatedDate;
}
public String getUpdatedDate(){
return updatedDate;
}
@Override
public String toString(){
return
"CatItem{" +
"stock_division_id = '" + stockDivisionId + '\'' +
",stock_category_name = '" + stockCategoryName + '\'' +
",stock_category_id = '" + stockCategoryId + '\'' +
",stock_category_status = '" + stockCategoryStatus + '\'' +
",created_date = '" + createdDate + '\'' +
",updated_date = '" + updatedDate + '\'' +
"}";
}
}
公共类数据{
@SerializedName("division")
private List<DivisionItem> division;
public void setDivision(List<DivisionItem> division){
this.division = division;
}
public List<DivisionItem> getDivision(){
return division;
}
@Override
public String toString(){
return
"Data{" +
"division = '" + division + '\'' +
"}";
}
}
public class DivisionItem {
@SerializedName("cat")
private List<CatItem> cat;
@SerializedName("division_name")
private String divisionName;
@SerializedName("division_id")
private String divisionId;
public void setCat(List<CatItem> cat){
this.cat = cat;
}
public List<CatItem> getCat(){
return cat;
}
public void setDivisionName(String divisionName){
this.divisionName = divisionName;
}
public String getDivisionName(){
return divisionName;
}
public void setDivisionId(String divisionId){
this.divisionId = divisionId;
}
public String getDivisionId(){
return divisionId;
}
@Override
public String toString(){
return
"DivisionItem{" +
"cat = '" + cat + '\'' +
",division_name = '" + divisionName + '\'' +
",division_id = '" + divisionId + '\'' +
"}";
}
}
模型类getMenuResponse 公共类GetMenuResponse {
@SerializedName("code")
private int code;
@SerializedName("data")
private Data data;
@SerializedName("message")
private String message;
public void setCode(int code){
this.code = code;
}
public int getCode(){
return code;
}
public void setData(Data data){
this.data = data;
}
public Data getData(){
return data;
}
public void setMessage(String message){
this.message = message;
}
public String getMessage(){
return message;
}
@Override
public String toString(){
return
"GetMenuResponse{" +
"code = '" + code + '\'' +
",data = '" + data + '\'' +
",message = '" + message + '\'' +
"}";
}
}
适配器类 public class ExpandableListAdapter扩展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 ExpandableListAdapter(Context context, List<String> listDataHeader,
HashMap<String, List<String>> listChildData) {
this._context = context;
this._listDataHeader = listDataHeader;
this._listDataChild = listChildData;
}
@Override
public Object getChild(int groupPosition, int childPosititon) {
return this._listDataChild.get(this._listDataHeader.get(groupPosition))
.get(childPosititon);
}
@Override
public long getChildId(int groupPosition, int childPosition) {
return childPosition;
}
@Override
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.list_item, null);
}
TextView txtListChild = (TextView) convertView
.findViewById(R.id.lblListItem);
txtListChild.setText(childText);
return convertView;
}
@Override
public int getChildrenCount(int groupPosition) {
return this._listDataChild.get(this._listDataHeader.get(groupPosition)).size();
}
@Override
public Object getGroup(int groupPosition) {
return this._listDataHeader.get(groupPosition);
}
@Override
public int getGroupCount() {
return this._listDataHeader.size();
}
@Override
public long getGroupId(int groupPosition) {
return groupPosition;
}
@Override
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;
}
@Override
public boolean hasStableIds() {
return false;
}
@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
return true;
}
}
MainActivity获取并尝试在此处设置数据我面临问题
公共类MainActivity扩展了AppCompatActivity {
ExpandableListAdapter listAdapter;
ExpandableListView expListView;
List<String> listDataHeader;
HashMap<String, List<String>> listDataChild;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
expListView = (ExpandableListView) findViewById(R.id.lvExp);
ApiInterface apiService = ApiClient.getClient().create(ApiInterface.class);
Call<GetMenuResponse> menuDetails = apiService.getMenuDetails();
menuDetails.enqueue(new Callback<GetMenuResponse>() {
@Override
public void onResponse(Call<GetMenuResponse> call, Response<GetMenuResponse> response) {
Data menuData = response.body().getData();
int menuSize = menuData.getDivision().size();
listDataHeader = new ArrayList<String>();
for (int i = 0; i < menuSize; i++) {
String divisionName = menuData.getDivision().get(i).getDivisionName();
listDataHeader.add(divisionName);
int subMenuSize = menuData.getDivision().get(i).getCat().size();
for (int j = 0; j < subMenuSize; j++) {
int submenusize = menuData.getDivision().get(i).getCat().size();
List<String> subMenu = new ArrayList<String>();
for (int k = 0; i < submenusize; k++) {
String stockCategoryName1 = menuData.getDivision().get(i).getCat().get(j).getStockCategoryName();
subMenu.add(stockCategoryName1);
listDataChild.put(divisionName, subMenu);
}
}
}
listAdapter = new ExpandableListAdapter(getApplicationContext(), listDataHeader, listDataChild);
expListView.setAdapter(listAdapter);
// listDataChild = new HashMap<String, List<String>>();
}
@Override
public void onFailure(Call<GetMenuResponse> call, Throwable t) {
Toast.makeText(MainActivity.this, "" + t.getMessage(), Toast.LENGTH_SHORT).show();
}
});
}
}
这是错误日志......
error stack
01-30 13:07:40.865 18248-18248/com.projectbox.uploadfile E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.projectbox.uploadfile, PID: 18248
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Object java.util.HashMap.put(java.lang.Object, java.lang.Object)' on a null object reference
at com.projectbox.uploadfile.MainActivity$1.onResponse(MainActivity.java:57)
at retrofit2.ExecutorCallAdapterFactory$ExecutorCallbackCall$1$1.run(ExecutorCallAdapterFactory.java:68)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6349)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:893)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:783)
Json的回应是......
Json response
{
"code": 200,
"message": "SUCCESS",
"data": {
"division": [
{
"division_id": "1",
"division_name": "Men",
"cat": [
{
"stock_category_id": "1",
"stock_division_id": "1",
"stock_category_name": "T-Shirts",
"stock_category_status": "1",
"created_date": "2018-01-12 12:00:14",
"updated_date": "2018-01-12 12:00:14"
},
{
"stock_category_id": "3",
"stock_division_id": "1",
"stock_category_name": "Jeans",
"stock_category_status": "1",
"created_date": "2018-01-23 06:43:59",
"updated_date": "2018-01-23 06:47:33"
}
]
},
{
"division_id": "2",
"division_name": "Women",
"cat": [
{
"stock_category_id": "2",
"stock_division_id": "2",
"stock_category_name": "T-Shirts",
"stock_category_status": "1",
"created_date": "2018-01-12 12:02:24",
"updated_date": "2018-01-12 12:02:24"
},
{
"stock_category_id": "4",
"stock_division_id": "2",
"stock_category_name": "Jeans",
"stock_category_status": "1",
"created_date": "2018-01-23 06:47:56",
"updated_date": "2018-01-23 06:47:56"
},
{
"stock_category_id": "5",
"stock_division_id": "2",
"stock_category_name": "Tops & Tunics",
"stock_category_status": "1",
"created_date": "2018-01-23 06:48:36",
"updated_date": "2018-01-23 06:48:36"
}
]
},
{
"division_id": "3",
"division_name": "Kids",
"cat": []
}
]
}
}
答案 0 :(得分:0)
从响应获取数组列表并设置适配器
List<DivisionItem> divisionItems=response.body().getData().getDivisionItem();
if(divisionItems.size>0)
{
listAdapter = new ExpandableListAdapter(MainActivity.this, divisionItems);
expListView.setAdapter(listAdapter);
}
替换适配器代码
public class ExpandableListAdapter extends BaseExpandableListAdapter {
FragmentActivity mFragmentActivity;
List<DivisionItem> divisionItems;
public PricingExpandableAdapter(FragmentActivity mFragmentActivity, List<DivisionItem> divisionItems) {
this.mFragmentActivity = mFragmentActivity;
this.divisionItems = divisionItems;
}
@Override
public Object getChild(int listPosition, int expandedListPosition) {
return divisionItems.get(listPosition).getCatItem().get(expandedListPosition);
}
@Override
public long getChildId(int listPosition, int expandedListPosition) {
return expandedListPosition;
}
@Override
public View getChildView(int listPosition, final int expandedListPosition,
boolean isLastChild, View convertView, ViewGroup parent) {
final String sub_title = divisionItems.get(listPosition).getCatItem().get(expandedListPosition).getStockCategoryName();
if (convertView == null) {
LayoutInflater layoutInflater = (LayoutInflater) mFragmentActivity
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = layoutInflater.inflate(R.layout.list_item, null);
}
return convertView;
}
@Override
public int getChildrenCount(int listPosition) {
return divisionItems.get(listPosition).getCatItem().size();
}
@Override
public Object getGroup(int listPosition) {
return divisionItems.get(listPosition);
}
@Override
public int getGroupCount() {
return divisionItems.size();
}
@Override
public long getGroupId(int listPosition) {
return listPosition;
}
@Override
public View getGroupView(int listPosition, boolean isExpanded,
View convertView, ViewGroup parent) {
String main_title = divisionItems.get(listPosition).getDivisionName();
if (convertView == null) {
LayoutInflater layoutInflater = (LayoutInflater) mFragmentActivity.
getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = layoutInflater.inflate(R.layout.list_group, null);
}
return convertView;
}
@Override
public boolean hasStableIds() {
return false;
}
@Override
public boolean isChildSelectable(int listPosition, int expandedListPosition) {
return true;
}
}
答案 1 :(得分:0)
我得到了这个答案吗?
public void onResponse(Call<GetMenuResponse> call, Response<GetMenuResponse> response) {
Data menuData = response.body().getData();
int menuSize = menuData.getDivision().size();
listDataHeader = new ArrayList<>();
listDataChild = new HashMap<ExpandedMenuModel, List<String>>();
for (int i = 0; i < menuSize; i++) {
String divisionName = menuData.getDivision().get(i).getDivisionName();
listDataHeader.add(new ExpandedMenuModel(divisionName));
List<String> listArrayList = new ArrayList<>();
int subMenuSize = menuData.getDivision().get(i).getCat().size();
for (int j = 0; j < subMenuSize; j++) {
String stockCategoryName1 = menuData.getDivision().get(i).getCat().get(j).getStockCategoryName();
listArrayList.add(stockCategoryName1);
listDataChild.put(listDataHeader.get(i), listArrayList);
}
}
mMenuAdapter = new ExpandableListAdapter(getApplicationContext(), listDataHeader, listDataChild, expandableList);
expandableList.setAdapter(mMenuAdapter);
}