RecycleViewAdapter中的SetExpandAdapter

时间:2016-09-13 08:53:53

标签: java android arraylist adapter

我有一个带有ExpandableLinearLayout的RecycleView List(我使用的是第三方库)。在我的ExpandableLinearLayout中,我有一个ListView,带有一个自定义的ArrayAdapter。

我在RecycleViewAdapter中设置了我的适配器并提交了一个包含4个ArrayLists的ArrayList和onBindViewHolder()方法的位置,也填充了RecycleView中的不同部分。

我在正确的部分传递数据,但我只得到每个ArrayList的第一个元素。我记录了一些东西,问题是我的ArrayAdapter中getView方法的位置总是为0 ..

我搜索并玩了一下但我没有找到解决方案..我希望有人可以提供帮助......

抱歉我的语法错误

这是我的RecycleView:

public class EmergencyPassAdapter extends RecyclerView.Adapter<EmergencyPassAdapter.EmergencyPassViewHolder> {
private static final String LOG_TAG = EmergencyPassAdapter.class.getName();
private Context context;
private ArrayList<CellInformation> cellInformations;
private SparseBooleanArray expandState = new SparseBooleanArray();
EmergencyPassExpandAdapter emergencyPassExpandAdapter;


public EmergencyPassAdapter(Context context, ArrayList<CellInformation> cellInformations) {
    this.context = context;
    this.cellInformations = cellInformations;
    for (int i = 0; i < cellInformations.size(); i++) {
        expandState.append(i, false);
    }
}

@Override
public EmergencyPassViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.cell_emergency_pass, parent, false);
    return new EmergencyPassViewHolder(view);
}

@Override
public void onBindViewHolder(final EmergencyPassViewHolder holder, final int position) {
    CellInformation cellInformation = cellInformations.get(position);

    holder.imageViewIcon.setImageDrawable(cellInformation.getIcon());
    holder.textViewTitle.setText(cellInformation.getTitel());

    emergencyPassExpandAdapter = new EmergencyPassExpandAdapter(context, EmergencyPassExpandDetailFactory.getExpandCellInformation(context), position);
    holder.listView.setAdapter(emergencyPassExpandAdapter);



    if (cellInformation.getTitel().equals(context.getResources().getString(R.string.emergency_informations_health_insurance_emergency_contacts))) {
        holder.expandableLinearLayout.setExpanded(expandState.get(position));
        holder.expandableLinearLayout.setListener(new ExpandableLayoutListenerAdapter() {
            @Override
            public void onPreOpen() {
                expandState.put(position, true);
                holder.imageViewArrow.setRotation(180);
            }

            @Override
            public void onPreClose() {
                expandState.put(position, false);
                holder.imageViewArrow.setRotation(360);
            }
        });
    } else if (cellInformation.getTitel().equals(context.getResources().getString(R.string.emergency_informations_health_insurance_legal_guardian))) {
        holder.expandableLinearLayout.setExpanded(expandState.get(position));
        holder.expandableLinearLayout.setListener(new ExpandableLayoutListenerAdapter() {
            @Override
            public void onPreOpen() {
                expandState.put(position, true);
                holder.imageViewArrow.setRotation(180);
            }

            @Override
            public void onPreClose() {
                expandState.put(position, false);
                holder.imageViewArrow.setRotation(360);
            }
        });
    } else {
        holder.expandableLinearLayout.setExpanded(expandState.get(position));
        holder.expandableLinearLayout.setListener(new ExpandableLayoutListenerAdapter() {
            @Override
            public void onPreOpen() {
                expandState.put(position, true);
                holder.imageViewArrow.setRotation(180);
            }

            @Override
            public void onPreClose() {
                expandState.put(position, false);
                holder.imageViewArrow.setRotation(360);
            }
        });
    }
    holder.relativeLayout.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            if (!holder.expandableLinearLayout.isExpanded()) {
                Log.i(LOG_TAG, "expand");
                holder.expandableLinearLayout.expand();
            } else {
                Log.i(LOG_TAG, "collapse");
                holder.expandableLinearLayout.collapse();
            }
        }
    });


}

@Override
public int getItemCount() {
    return cellInformations.size();
}

public static class EmergencyPassViewHolder extends RecyclerView.ViewHolder {
    TextView textViewTitle, textViewExpandText;
    ImageView imageViewIcon, imageViewArrow;
    ExpandableLinearLayout expandableLinearLayout;
    RelativeLayout relativeLayout;
    ListView listView;

    public EmergencyPassViewHolder(View itemView) {
        super(itemView);
        textViewTitle = (TextView) itemView.findViewById(R.id.cell_emergency_pass_title_tv);
        textViewExpandText = (TextView) itemView.findViewById(R.id.cell_emergency_pass_expand_detail_tv);
        imageViewIcon = (ImageView) itemView.findViewById(R.id.cell_emergency_pass_icon_iv);
        imageViewArrow = (ImageView) itemView.findViewById(R.id.cell_emergency_pass_arrow_icon_iv);
        expandableLinearLayout = (ExpandableLinearLayout) itemView.findViewById(R.id.cell_emergency_pass_arrow_expandable_list);
        relativeLayout = (RelativeLayout) itemView.findViewById(R.id.cell_emergency_pass_root_rl);
        listView = (ListView) itemView.findViewById(R.id.cell_emergency_pass_expand_lv);

    }
}

}

我的ArrayAdapter

public class EmergencyPassExpandAdapter extends ArrayAdapter<CellExpandInformation>{
private static final String LOG_TAG = EmergencyPassExpandAdapter.class.getName();
private ArrayList<CellExpandInformation> values;
private int checkPosition;
private Context context;

public EmergencyPassExpandAdapter(Context context, ArrayList<CellExpandInformation> values, int checkPosition) {
    super(context, -1, values);
    this.context = context;
    this.values = values;
    this.checkPosition = checkPosition;
}


@Override
public View getView(int position, View convertView, ViewGroup parent) {
    Log.i(LOG_TAG,"View");
    Log.i(LOG_TAG,"Position: " + position);
    EmergencyPassExpandViewHolder viewHolder;
    CellExpandInformation cellExpandInformation = values.get(position);

    if (convertView == null) {
        LayoutInflater inflater = ((Activity) context).getLayoutInflater();
        convertView = inflater.inflate(R.layout.cell_emergency_pass_expand, parent, false);
        viewHolder = new EmergencyPassExpandViewHolder();
        viewHolder.textViewExpandTitle = (TextView) convertView.findViewById(R.id.cell_emergency_pass_expand_detail_tv);

        convertView.setTag(viewHolder);
    } else {
        viewHolder = (EmergencyPassExpandViewHolder) convertView.getTag();
    }

    Log.i(LOG_TAG,"CheckPosition: " + checkPosition);

    if (values != null) {
        if (checkPosition == 0) {
            viewHolder.textViewExpandTitle.setText(cellExpandInformation.getMedications().get(position).getMedicationName());
            Log.i(LOG_TAG, "Medications: " + cellExpandInformation.getMedications().get(position).getMedicationName());
        } else if (checkPosition == 1) {
            viewHolder.textViewExpandTitle.setText(cellExpandInformation.getAllergies().get(position).getAllgergiesName());
        } else if (checkPosition == 2) {
            viewHolder.textViewExpandTitle.setText(cellExpandInformation.getDiseases().get(position).getDiseasesName());
        } else if (checkPosition == 3) {
            viewHolder.textViewExpandTitle.setText(cellExpandInformation.getLegalGuradian().get(position).getGuradianName());
        } else if (checkPosition == 4) {
            viewHolder.textViewExpandTitle.setText(cellExpandInformation.getEmergencyContact().get(position).getEmergencyContactName());
        }
    }


    for(int i = 0; i < cellExpandInformation.getMedications().size(); i++){
        Log.i(LOG_TAG,"Medis: " + cellExpandInformation.getMedications().get(i).getMedicationName());
    }
    return convertView;
}

static class EmergencyPassExpandViewHolder {
    TextView textViewExpandTitle;
    ImageView imageViewPhone, imageViewEmail, imageViewAdd;
}

}

0 个答案:

没有答案