programacion - manual de android en pdf
¿Es posible configurar el adaptador en el diseño lineal? (2)
¿Es posible configurar el adaptador a LinearLayout
?
No quiero usar ListView
porque estoy usando ScrollView
. entonces estoy usando LinearLayout
...
En eso, estoy agregando vistas dinámicamente y ahora necesito usar el adaptador ... entonces, ¿alguien tiene alguna sugerencia?
Yo estoy haciendo esto...
LinearLayout clientList = (LinearLayout) findViewById(R.id.clients);
adapter = new Sample1AdapterActivity(this, arrayList);
View list = (ListView) getLayoutInflater().inflate(R.layout.user_details, getListView(), false);
no, no puedes Lo que puede hacer es inflar la fila individual y agregarla a LinearLayout. En pseudo código:
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)
}
Sí, puede agregar su propia implementación LinearLayout específica para obtener vistas secundarias desde el adaptador. Sin embargo, mi implementación básica no proporcionará todo el código de vista de reciclaje proporcionado por la vista de lista.
/**
* 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();
}
}