Android, есть идея показать вложенный список со случайной шириной и высотой?

У меня есть вложенный список, такой как A{a1, a2, a3...aN}, B{B1, BM}, .... O{O1, o2, ... OP} this. В списке есть случайное количество участников. Каждый участник также список со случайными членами. Это будет показано как на картинке ниже. Как видите, ширина и высота внешней ячейки не фиксированы. Я думаю, может быть, это будет возможно, если я использую вложенный просмотрщик. Это немного похоже на StaggeredGridLayoutManager. Но, как я понял, у StaggeredGridLayoutManager должно быть одно из значений ширины или высоты. Любое предложение, как реализовать этот вид дизайна пользовательского интерфейса? Это то, что я хочу отобразить

Это то, что отображается, когда я использую StaggeredGridLayoutManager

Это внешний адаптер списка /********** класс GroupAdapter extends RecyclerView.Adapter{

    @Override
    public GroupHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.cell_group, null);
        GroupHolder ih = new GroupHolder(v);
        return ih;
    }

    @Override
    public void onBindViewHolder(GroupHolder holder, int position) {
        if(mGroups!=null && mGroups.size()>position) {
            GroupObject group = mGroups.get(position);
            ArrayList<CandidateObject> cans = group.getCandidates();
            CandidateAdapter adapter = new CandidateAdapter(cans);
            CustomLinearLayoutManager mLinearManager = new CustomLinearLayoutManager(MainActivity.this);
            mLinearManager.setAutoMeasureEnabled(true);
            holder.rvCandis.setLayoutManager(mLinearManager);
            holder.tvTitle.setText(group.getName());
            holder.rvCandis.setAdapter(adapter);
        }
    }

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

private static class GroupHolder extends RecyclerView.ViewHolder {
    private TextView tvTitle;
    private RecyclerView rvCandis;
    public int index;

    private GroupHolder(View v) {
        super(v);
        this.tvTitle = (TextView) v.findViewById(R.id.tv_partyname);
        this.rvCandis = (RecyclerView) v.findViewById(R.id.rvCandi);
    }
}

И это класс адаптера внутреннего списка CandidateAdapter extends RecyclerView.Adapter {ArrayList candis;

    CandidateAdapter(ArrayList<CandidateObject> candis){
        this.candis = candis;
    }

    @Override
    public CandidateHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.cell_candidate, null);
        CandidateHolder ih = new CandidateHolder(v);
        return ih;
    }

    @Override
    public void onBindViewHolder(CandidateHolder holder, int position) {
        if(candis!=null && candis.size()>position) {
            CandidateObject c = candis.get(position);
            holder.tvName.setText(c.getName());
        }
    }

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

private static class CandidateHolder extends RecyclerView.ViewHolder {
    private ImageView ivThumb;
    private TextView tvName;
    public int index;

    private CandidateHolder(View v) {
        super(v);
        this.tvName = (TextView) v.findViewById(R.id.tv_name);
        this.ivThumb = (ImageView) v.findViewById(R.id.ivNaver);
    }
}

StaggeredGridLayoutManager сделан следующим образом.

     setContentView(R.layout.activity_main);
    StaggeredGridLayoutManager mLayManager = new StaggeredGridLayoutManager(3, StaggeredGridLayoutManager.VERTICAL);
    mRvVote = (RecyclerView) findViewById(R.id.rvVote);
    mRvVote.setLayoutManager(mLayManager);

0 ответов

Другие вопросы по тегам