package com.datdo.mobilib.adapter; import android.content.Context; import android.view.View; import android.view.ViewGroup; import android.widget.FrameLayout; import android.widget.LinearLayout; import java.util.ArrayList; import java.util.List; /** * Created by datdvt on 2015/07/07. */ public class MblUniversalMultipartItem implements MblUniversalItem { private List<MblUniversalSinglePartItem> mParts; private int mPaddingLeft; private int mPaddingTop; private int mPaddingRight; private int mPaddingBottom; private int mSpacing; public MblUniversalMultipartItem(List<? extends MblUniversalSinglePartItem> parts) { mParts = new ArrayList<>(parts); } @Override public View create(Context context) { LinearLayout layout = new LinearLayout(context); layout.setOrientation(LinearLayout.HORIZONTAL); return layout; } @Override public void display(View view) { // add part-frames if needed LinearLayout layout = (LinearLayout) view; if (layout.getChildCount() == 0) { layout.setWeightSum(mParts.size()); for (int i = 0; i < mParts.size(); i++) { FrameLayout partFrame = new FrameLayout(layout.getContext()); partFrame.setId(i + 1); LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(0, LinearLayout.LayoutParams.WRAP_CONTENT); lp.weight = 1; partFrame.setLayoutParams(lp); layout.addView(partFrame); } } // display parts for (int i = 0; i < mParts.size(); i++) { displayPart(view, i + 1, mParts.get(i)); } // set paddings view.setPadding(mPaddingLeft, mPaddingTop, mPaddingRight, mPaddingBottom); } private void displayPart(View view, int partFrameId, MblUniversalSinglePartItem part) { FrameLayout partFrame = (FrameLayout) view.findViewById(partFrameId); if (partFrameId > 1 && mSpacing > 0) { ((ViewGroup.MarginLayoutParams)partFrame.getLayoutParams()).leftMargin = mSpacing; } if (part != null) { boolean needInflate = partFrame.getChildCount() == 0 || partFrame.getTag() == null || part.getClass() != partFrame.getTag().getClass(); if (needInflate) { View partView = part.create(view.getContext()); partFrame.removeAllViews(); partFrame.addView(partView, new FrameLayout.LayoutParams( FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.WRAP_CONTENT)); part.display(partView); } else { part.display(partFrame.getChildAt(0)); } partFrame.setTag(part); } else { partFrame.removeAllViews(); partFrame.setTag(null); } } public MblUniversalSinglePartItem getPartAt(int index) { try { return mParts.get(index); } catch (Exception e) { return null; } } public boolean setPartAt(MblUniversalSinglePartItem part, int index) { try { mParts.set(index, part); return true; } catch (Exception e) { e.printStackTrace(); return false; } } public void setPaddings(int l, int t, int r, int b) { mPaddingLeft = l; mPaddingTop = t; mPaddingRight = r; mPaddingBottom = b; } public void setSpacing(int spacing) { mSpacing = spacing; } }