带有内部数组 class 的数组 pojo class 的 RecyclerView 适配器

RecyclerView adapter of array pojo class with inner array class

这有点令人困惑,尽管我认为它比我想的要简单。

我有一个名为商品的 class 和一个名为止损的 class,止损 class 包含一系列商品。 stops 内的所有项目都正确解析,如果我在调试器上检查 stops class 的内容,我可以看到一切都在它应该去的地方。问题在于知道从用于显示 Stops class 及其内部 Commodities addapter class.

内容的适配器中获取什么

这是我的代码(很简短)

首先是停靠点class

public class Stops implements Parcelable{
    private String stop_id;
    private String type;
    private String location;
    private String address;
    private String city;
    private String state;
    private String zip;
    private String from;
    private String to;

    private Commodities[] commodities;

    public Stops() {}
    public String getStop_id() {
        return stop_id;
    }

    public void setStop_id(String stop_id) {
        this.stop_id = stop_id;
    }

    public String getType() {
        return type;
    }

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


    public String getLocation() {
        return location;
    }

    public void setLocation(String location) {
        this.location = location;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public String getCity() {
        return city;
    }

    public void setCity(String city) {
        this.city = city;
    }

    public String getState() {
        return state;
    }

    public void setState(String state) {
        this.state = state;
    }

    public String getZip() {
        return zip;
    }

    public void setZip(String zip) {
        this.zip = zip;
    }

    public String getFrom() {
        return from;
    }

    public void setFrom(String from) {
        this.from = from;
    }

    public String getTo() {
        return to;
    }

    public void setTo(String to) {
        this.to = to;
    }

    public Commodities[] getCommodities() {
        return commodities;
    }



    public void setCommodities(Commodities[] commodities) {
        this.commodities = commodities;
    }
    /**
     * The content for the actual parcelables start in here
     *
     * */
    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeTypedArray(commodities,0);
        dest.writeString(address);

    }
    private Stops(Parcel in){
        commodities = in.createTypedArray(Commodities.CREATOR);
        address = in.readString();
    }
    public static final Creator<Stops> CREATOR = new Creator<Stops>(){
        @Override
        public Stops createFromParcel(Parcel source) {
            return new Stops(source);
        }
        @Override
        public Stops[] newArray(int size){
            return new Stops[size];
        }
    };
}

然后是商品class

public class Commodities  implements Parcelable{
    private String item;
    private String description;
    private String poNumber;
    private String qty;
    private String weight;

    public Commodities() {}

    public String getItem() {
        return item;
    }

    public void setItem(String item) {
        this.item = item;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public String getPoNumber() {
        return poNumber;
    }

    public void setPoNumber(String poNumber) {
        this.poNumber = poNumber;
    }

    public String getQty() {
        return qty;
    }

    public void setQty(String qty) {
        this.qty = qty;
    }

    public String getWeight() {
        return weight;
    }

    public void setWeight(String weight) {
        this.weight = weight;
    }

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

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(item);
        dest.writeString(description);
        dest.writeString(poNumber);
        dest.writeString(qty);
        dest.writeString(weight);
    }
    private Commodities(Parcel in){
        item = in.readString();
        description  =in.readString();
        poNumber = in.readString();
        qty = in.readString();
        weight = in.readString();
    }

    public static final Creator<Commodities> CREATOR = new Creator<Commodities>() {
        @Override
        public Commodities createFromParcel(Parcel source) {
            return new Commodities(source);
        }
        @Override
        public Commodities[] newArray(int size) {
            return new Commodities[size];}
    };
}

上述信息的适配器当前为:

public class StopsAdapter 扩展 RecyclerView.Adapter{

    Stops[] como; // change this to stops and every other ocurrance of stops
    public StopsAdapter(Stops[] comms){
        como = comms;
    }
    @Override
    public StopsViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.load_display_items, parent, false);
        StopsViewHolder holder = new StopsViewHolder(view);
        return holder;
    }

    @Override
    public void onBindViewHolder(StopsViewHolder holder, int position) {
        holder.bindStops(como[position]);

    }

    @Override
    public int getItemCount() {
        return como.length;
    }

    public class StopsViewHolder extends RecyclerView.ViewHolder {
        public TextView mItem;
        public StopsViewHolder(View itemView) {
            super(itemView);
            mItem = (TextView)itemView.findViewById(R.id.nameHolder);
        }
        public void bindStops(Stops stop) {
            mItem.setText(stop.getAddress());
            Log.d("<",mItem.getText().toString());
        }
    }
}

获取信息并启动适配器的activity:

public class LoadsActivity extends AppCompatActivity {

    // et the gold juju
    private Stops[] commodities;
    @BindView(R.id.recyclerView) RecyclerView mRecyclerView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_loads);
        ButterKnife.bind(this);

        //get that intent parcelable juju mojo baby
        Intent intent = getIntent();
        Parcelable[] parcelable = intent.getParcelableArrayExtra(MainActivity.COMM_CONTENT);

        commodities = Arrays.copyOf(parcelable, parcelable.length, Stops[].class);


        //adapter bitches
        StopsAdapter adapter = new StopsAdapter(commodities);
        mRecyclerView.setAdapter(adapter);
        RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(this);
        mRecyclerView.setLayoutManager(layoutManager);

        mRecyclerView.setHasFixedSize(true);


    }

}

显示的内容是根据我在 Stops class 内的内容填充的,这很好,像地址这样的变量(正如我在可打包部分中编码的那样)会相应地显示,但我的问题基本上是。我将如何使用商品项目?如果我尝试调用(在停止适配器中)

 mItem.setText(stop.getCommodities().getItem());

我收到一条错误消息,指出它无法解析商品中的方法 getItem() class。

基本上,我不知道如何从 StopsAdapter 中的商品中获取内容。

函数getCommodities()returns一个数组。

 public Commodities[] getCommodities() {
    return commodities;
}

您应该 select 和退回的商品中的项目,以便您可以访问该元素的信息

mItem.setText(stop.getCommodities()[index].getItem());