android - क्या एडाप्टर को रैखिक लेआउट में सेट करना संभव है?




android-layout scrollview (2)

क्या एडैप्टर को एक LinearLayout सेट करना संभव है?

मैं ScrollView का उपयोग कर रहा हूँ क्योंकि मैं ListView का उपयोग नहीं करना चाहता इसलिए मैं LinearLayout का उपयोग कर रहा हूँ ...

उसमें मैं गतिशील रूप से दृश्य जोड़ रहा हूं और अब मुझे एडाप्टर का उपयोग करने की आवश्यकता है .. तो किसी के पास कोई सुझाव है?

मैं यह कर रहा हूं ...

LinearLayout clientList = (LinearLayout) findViewById(R.id.clients);
adapter = new Sample1AdapterActivity(this, arrayList);
View list = (ListView) getLayoutInflater().inflate(R.layout.user_details, getListView(), false);

https://code.i-harness.com


नहीं, आप नहीं कर सकते आप क्या कर सकते हैं एक पंक्ति को फुलाएं, और लीनियर लेआउट में जोड़ रहे हैं। छद्म कोड में:

  LinearLayout linearLayout = (LinearLayout) findViewById(...);
  LayoutInflater inflater = LayoutInflater.from(this);
  for (item in arrayList) {
     View view  = inflater.inflate(R.layout.row, linearLayout, false); 
     // set item content in view
     linearLayout.addView(view)
  }

हाँ, आप एडाप्टर से बाल दृश्य प्राप्त करने के लिए अपना स्वयं का विशिष्ट रैखिक लेआउट क्रियान्वयन जोड़कर कर सकते हैं। हालांकि, मेरा मूल कार्यान्वयन सूची दृश्य द्वारा प्रदान किए गए सभी दृश्य रीसाइक्लिंग कोड प्रदान नहीं करेगा।

/**
 * A linear layout that will contain views taken from an adapter. It differs
 * from the list view in the fact that it will not optimize anything and
 * draw all the views from the adapter. It also does not provide scrolling.
 * However, when you need a layout that will render views horizontally and
 * you know there are not many child views, this is a good option.

 *
 * @author Vincent Mimoun-Prat @ MarvinLabs
 */
public class AdapterLinearLayout extends LinearLayout {

    private Adapter adapter;
    private DataSetObserver dataSetObserver = new DataSetObserver() {
        @Override
        public void onChanged() {
            super.onChanged();
            reloadChildViews();
        }
    };

    @TargetApi(Build.VERSION_CODES.HONEYCOMB)
    public AdapterLinearLayout(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        setOrientation(LinearLayout.HORIZONTAL);
    }

    public AdapterLinearLayout(Context context, AttributeSet attrs) {
        super(context, attrs);
        setOrientation(LinearLayout.HORIZONTAL);
    }

    public AdapterLinearLayout(Context context) {
        super(context);
        setOrientation(LinearLayout.HORIZONTAL);
    }

    public void setAdapter(Adapter adapter) {
        if (this.adapter == adapter) return;
        this.adapter = adapter;
        if (adapter != null) adapter.registerDataSetObserver(dataSetObserver);
        reloadChildViews();
    }

    @Override
    protected void onDetachedFromWindow() {
        super.onDetachedFromWindow();
        if (adapter != null) adapter.unregisterDataSetObserver(dataSetObserver);
    }

    private void reloadChildViews() {
        removeAllViews();

        if (adapter == null) return;

        int count = adapter.getCount();
        for (int position = 0; position < count; ++position) {
            View v = adapter.getView(position, null, this);
            if (v != null) addView(v);
        }

        requestLayout();
    }
}




scrollview