Adición dinámica de un niño a LinearLayout con la obtención de la posición de cada niño
Tengo un problema con la posición del niño de LinearLayout . Primero estoy agregando dinámicamente una serie de botones y luego estoy tratando de devolver el índice de cada niño y mostrarlo en un TextView . Aquí estoy compartiendo código:
Java fuente :
- Obtener la ubicación secundaria en HorizontalScrollView y desplácese hasta ella
- ¿Configurar el pulgar en una posición particular (no en el desplazamiento) de seekbar mediante programación?
- Android: ¿Cómo obtener el actual desplazamiento X de RecyclerView?
- Compruebe si la conexión inalámbrica está activada (incluso si no está conectada a ninguna red)
- Cómo cambiar la posición de inicio de la pista de Android SeekBar?
private String[] categories; private LinearLayout ll; private TextView tv; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); categories = getResources().getStringArray(R.array.categories); tv = (TextView) findViewById(R.id.text); ll = (LinearLayout) findViewById(R.id.hsvLinearLayout); for(int i = 0; i < categories.length; i++) { Button btn = new Button(this); btn.setText(categories[i]); btn.setOnClickListener(buttonClick); ll.addView(btn); } } OnClickListener buttonClick = new OnClickListener() { public void onClick(View v) { tv.setText(ll.indexOfChild(v)); } };
Xml estructura :
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="fill_parent" > <HorizontalScrollView android:id="@+id/Footer" android:orientation="horizontal" android:layout_width="wrap_content" android:layout_height="wrap_content" android:scrollbars="none" android:fadingEdge="none" > <LinearLayout android:id="@+id/hsvLinearLayout" android:orientation="horizontal" android:layout_width="wrap_content" android:layout_height="wrap_content" > </LinearLayout> </HorizontalScrollView> <TextView android:id="@+id/text" android:layout_width="fill_parent" android:layout_height="wrap_content" />
Recursos :
<string name="today">Today</string> <string name="life">Life</string> <string name="corner">Corner</string> <string name="banks">Banks</string> <string name="it">IT</string> <string name="fun">Fun</string> <array name="categories"> <item>@string/today</item> <item>@string/life</item> <item>@string/corner</item> <item>@string/banks</item> <item>@string/it</item> <item>@string/fun</item> </array>
La adición dinámica está bien, pero la forma en que estoy configurando OnClickListener produce algún error. Cualquier ayuda será útil! El propósito de eso es si quiero agregar uno o más botones a la HorizontalScrollView no ser necesario para editar muchos archivos, y sólo para ir a sting.xml y crear un nuevo elemento en la matriz de categorías !
Esto es lo que produjo LogCat :
07-12 22:37:17.680: INFO/System.out(331): waiting for debugger to settle... 07-12 22:37:17.900: INFO/System.out(331): debugger has settled (1441) 07-12 22:37:20.870: INFO/ActivityManager(61): Displayed activity com.test/.TestDynam: 10203 ms (total 10203 ms) 07-12 22:37:25.552: WARN/ResourceType(331): No package identifier when getting value for resource number 0x00000000 07-12 22:37:26.871: DEBUG/dalvikvm(132): GC freed 190 objects / 8976 bytes in 901ms
Para aclarar – la aplicación se inicia sin errores, pero cuando hago clic en un botón que produce esta línea del registro anterior:
07-12 22:37:25.552: WARN/ResourceType(331): No package identifier when getting value for resource number 0x00000000
Y esto es de depurador :
TestDynam [Android Application] DalvikVM[localhost:8611] Thread [<3> main] (Suspended (exception Resources$NotFoundException)) ViewRoot.handleMessage(Message) line: 1704 ViewRoot(Handler).dispatchMessage(Message) line: 99 Looper.loop() line: 123 ActivityThread.main(String[]) line: 4203 Method.invokeNative(Object, Object[], Class, Class[], Class, int, boolean) line: not available [native method] Method.invoke(Object, Object...) line: 521 ZygoteInit$MethodAndArgsCaller.run() line: 791 ZygoteInit.main(String[]) line: 549 NativeStart.main(String[]) line: not available [native method] Thread [<13> Binder Thread #2] (Running) Thread [<11> Binder Thread #1] (Running)
- ¿Cómo cambiar la posición de un diálogo de progreso?
- Sistema de Posicionamiento Interior basado en Giroscopio y Acelerómetro
- Confusión en 'posición' en la función instantiateItem en la clase PagerAdapter (android)
- Combinando wrap_content en el padre y fill_parent en el niño
- Android - Establecer Layout_Gravity de forma programática para LinearLayout
- Android: Utilizar el elemento seleccionado en AutoCompleteTextView para rellenar otro campo
- Establecer la posición del cursor de edición de texto en función de la posición de toque del usuario Android
- Establecer la posición absoluta de una vista
Tu problema es recursos …. usas el método setText (int) (que index es int …) que busca recursos y no string, no es StringBuilder para el cual puedes lanzar cualquier tipo y obtener una cadena. Necesita reemplazar
Tv.setText (ll.indexOfChild (v));
con
Tv.setText (Integer.toString (ll.indexOfChild (v)));
Y si quieres incluso un poco de eficiencia:
public class TestActivity extends Activity { private String[] categories; private LinearLayout ll; private TextView tv; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); categories = getResources().getStringArray(R.array.categories); tv = (TextView) findViewById(R.id.text); ll = (LinearLayout) findViewById(R.id.hsvLinearLayout); for(int i = 0; i < categories.length; i++) { Button btn = new Button(this); btn.setText(categories[i]); btn.setOnClickListener(buttonClick); ll.addView(btn); int idx = ll.indexOfChild(btn); btn.setTag(Integer.toString(idx)); } } OnClickListener buttonClick = new OnClickListener() { public void onClick(View v) { String idxStr = (String)v.getTag(); tv.setText(idxStr); } }; }
Debes setContentView antes de iniciar findViewById
setContentView(R.layout.main); tv = (TextView) findViewById(R.id.text);
- Android – ¿Cómo puedo vincular mi aplicación gratuita a la versión Pro
- ¿Existen alternativas a Google Cloud Messaging para las compilaciones personalizadas de Android?