Заполните Spinner от JSON модельного класса - PullRequest
0 голосов
/ 08 апреля 2020

Привет, я новичок в использовании прядильщика, никогда не использовал его раньше, а также заполнил его данными json. Я пытаюсь найти какое-то решение или хотя бы немного узнать о том, как это сделать, но не могу найти какое-либо понятное решение. Был бы признателен, если кто-то может направить меня на правильный путь.

Мои JSON данные выглядят примерно так, как показано ниже:

{ 
 "Devices": [
 {
  "type": "alarm",
  "displayType": "Alarm",
  "imageId": "alarm"
 },
 {
  "type": "audio_bridge",
  "displayType": "Audio Bridge",
  "imageId": "audio"
 },
 {
  "type": "av_receiver",
  "displayType": "Av Receiver",
  "imageId": "default"
 },
 {
  "type": "baby_monitor",
  "displayType": "Baby Monitor",
  "imageId": "mobile"
 },
 {
  "type": "baseport",
  "displayType": "Baseport",
  "imageId": "default"
 },
 {
  "type": "camera",
  "displayType": "Camera",
  "imageId": "camera"
 },
 {
  "type": "console",
  "displayType": "Console",
  "imageId": "console"
 }
 ]
}

Мне нужно просто извлечь displayType из этого JSON. И у меня есть класс модели для выполнения и извлечения любых необходимых данных, как показано ниже:

@SerializedName("type")
@Expose
private String type;
@SerializedName("displayType")
@Expose
private String displayType;
@SerializedName("imageId")
@Expose
private String imageId;

protected Devices(Parcel in) {
    type = in.readString();
    displayType = in.readString();
    imageId = in.readString();
}

@Override
public int describeContents() {
    return 0;
}

@Override
public void writeToParcel(Parcel parcel, int i) {
    parcel.writeValue(type);
    parcel.writeValue(displayType);
    parcel.writeValue(imageId);

}

public String getType() {
    return type;
}

public void setType(String type) {
    this.type = type;
}

public String getDisplayType() {
    return displayType;
}

public void setDisplayType(String displayType) {
    this.displayType = displayType;
}

public String getImageId() {
    return imageId;
}

public void setImageId(String imageId) {
    this.imageId = imageId;
}

Дело в том, что я хотел бы динамически перечислить все displayType на основе json в счетчик в моей деятельности.

Ответы [ 2 ]

0 голосов
/ 09 апреля 2020

Используйте пользовательский адаптер, чтобы передать список данных, которые вы хотите отобразить на счетчике, примерно так, в зависимости от интерфейса, который вы хотите показать.

public class CustomAdapter extends ArrayAdapter<String>{     

private Activity activity;
private ArrayList data;
public Resources res;
SpinnerModel tempValues=null;
LayoutInflater inflater;

/*************  CustomAdapter Constructor *****************/
public CustomAdapter(
                      CustomSpinner activitySpinner, 
                      int textViewResourceId,   
                      ArrayList objects,
                      Resources resLocal
                     ) 
 {
    super(activitySpinner, textViewResourceId, objects);

    /********** Take passed values **********/
    activity = activitySpinner;
    data     = objects;
    res      = resLocal;

    /***********  Layout inflator to call external xml layout () **********************/
    inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

  }

@Override
public View getDropDownView(int position, View convertView,ViewGroup parent) {
    return getCustomView(position, convertView, parent);
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    return getCustomView(position, convertView, parent);
}

// This funtion called for each row ( Called data.size() times )
public View getCustomView(int position, View convertView, ViewGroup parent) {

    /********** Inflate spinner_rows.xml file for each row ( Defined below ) ************/
    View row = inflater.inflate(R.layout.spinner_rows, parent, false);

    /***** Get each Model object from Arraylist ********/
    tempValues = null;
    tempValues = (SpinnerModel) data.get(position);

    TextView label        = (TextView)row.findViewById(R.id.company);
    TextView sub          = (TextView)row.findViewById(R.id.sub);
    ImageView companyLogo = (ImageView)row.findViewById(R.id.image);

    if(position==0){

        // Default selected Spinner item 
        label.setText("Please select company");
        sub.setText("");
    }
    else
    {
        // Set values for spinner each row 
        label.setText(tempValues.getCompanyName());
        sub.setText(tempValues.getUrl());
        companyLogo.setImageResource(res.getIdentifier
                                     ("com.androidexample.customspinner:drawable/"
                                      + tempValues.getImage(),null,null));

    }   

    return row;
  }

}

0 голосов
/ 08 апреля 2020

Вы должны создать String Arraylist и поместить его в адаптер спиннера.

ArrayList<String> deviceTypeList = new ArrayList<String>();

for (device : Devices ){
     deviceTypeList.add (device.getDisplayType())
}

ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_spinner_item, deviceTypeList);
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

yourSpinnerName.setAdapter (adapter)
...