是否可以将适配器设置为线性布局?

是否可以将适配器设置为LinearLayout

我不想使用ListView因为我使用ScrollView 。 所以我使用LinearLayout

在这我dynamic添加视图,现在我需要使用适配器..所以任何人有任何build议?

我正在这样做…

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

Solutions Collecting From Web of "是否可以将适配器设置为线性布局?"

不,你不能。 你可以做的是膨胀单行,并添加到LinearLayout。 在伪代码中:

  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) } 

是的,你可以通过添加你自己特定的LinearLayout实现来从适配器获取子视图。 但是,我的基本实现将不提供列表视图提供的所有视图回收代码。

 /** * 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(); } }