Cambiar la ubicación del indicador en ExpandableListView causando problemas
Estoy tratando de establecer mi indicador para estar al lado de la vista de texto, pero no puedo obtener el código correcto para hacerlo.
XML:
- GSON / Jackson en Android
- ¿Puede utilizar declaraciones condicionales en el caso de conmutación en Android?
- Ejecutar gradle -v devuelve "JAVA_HOME está establecido en un directorio no válido" aunque tenga un JAVA_HOME válido
- GTA2 como Car Physics, pero extremadamente simplificado
- SetOnClickListener (nuevo OnClickListener () {})
<TextView android:id="@+id/lblListHeader" android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="center" android:paddingLeft="?android:attr/expandableListPreferredItemPaddingLeft" android:textColor="#000000" android:textSize="17dp" /> <ImageView android:id="@+id/imageView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_toLeftOf="@+id/lblListHeader" android:src="@drawable/custom_arrow" />
Esta es la única pila de código que he encontrado investigando pero no puedo conseguir que funcione:
//inside getGropView method View v; if (convertView == null) { v = newGroupView(isExpanded, parent); } else { v = convertView; } bindView(v, mGroupData.get(groupPosition), mGroupFrom, mGroupTo); ((ImageView) v.findViewById(R.id.videos_group_indicator)) .setImageResource(isExpanded?R.drawable.videos_chevron_expanded:R.drawable.videos_chevron_collapsed); return v;
El principal problema es que "subraya" el método newGroupView etc, porque no tengo tal método y no se menciona cómo crearlo en el ejemplo que estaba buscando.
Además, una vez que consiga la solución, ¿alguien podría intentar explicarme este código? Lo he leído a través de un montón de tiempo y no puedo entenderme, soy un principiante.
- Android Lollipop Diseño del material Desbordamiento Menú Icon color
- Java.lang.ClassCastException: org.json.simple.JSONArray no se puede convertir en org.json.JSONArray
- ¿Cómo utilizar la biblioteca JNI compilada por NDK en una aplicación Java normal no Android?
- Tratando de devolver datos de PHP con JSON a Android ...
- Usando ScreenUtils para guardar la captura de pantalla como imagen en libgdx
- Diálogo de reemplazo dismiss () con la nueva AlphaAnimation
- Android: Ocultar ActionBar, mantener las pestañas
- Recibir un valor de cadena en MainActivity de SecondActivity y luego contarlo hacia abajo
A continuación se muestra un ejemplo de vista de lista expandible personalizada:
Qué desea ver si aplica este código en su nuevo proyecto:
crear este código en la actividad
public class ExpActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // Находим наш list ExpandableListView listView = (ExpandableListView)findViewById(R.id.exListView); //Создаем набор данных для адаптера ArrayList<ArrayList<String>> groups = new ArrayList<ArrayList<String>>(); ArrayList<String> children1 = new ArrayList<String>(); ArrayList<String> children2 = new ArrayList<String>(); children1.add("Child_1"); children1.add("Child_2"); groups.add(children1); children2.add("Child_1"); children2.add("Child_2"); children2.add("Child_3"); groups.add(children2); //Создаем адаптер и передаем context и список с данными ExpListAdapter adapter = new ExpListAdapter(getApplicationContext(), groups); listView.setAdapter(adapter); } }
agregue expandableListView en main.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <ExpandableListView android:id="@+id/exListView" android:layout_width="match_parent" android:layout_height="match_parent" android:indicatorLeft="250dp" android:indicatorRight="300dp" /> </LinearLayout>
crear una clase de adaptador
public class ExpListAdapter extends BaseExpandableListAdapter { private ArrayList<ArrayList<String>> mGroups; private Context mContext; public ExpListAdapter (Context context,ArrayList<ArrayList<String>> groups){ mContext = context; mGroups = groups; } @Override public int getGroupCount() { return mGroups.size(); } @Override public int getChildrenCount(int groupPosition) { return mGroups.get(groupPosition).size(); } @Override public Object getGroup(int groupPosition) { return mGroups.get(groupPosition); } @Override public Object getChild(int groupPosition, int childPosition) { return mGroups.get(groupPosition).get(childPosition); } @Override public long getGroupId(int groupPosition) { return groupPosition; } @Override public long getChildId(int groupPosition, int childPosition) { return childPosition; } @Override public boolean hasStableIds() { return true; } @Override public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { if (convertView == null) { LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); convertView = inflater.inflate(R.layout.group_view, null); } if (isExpanded){ //Изменяем что-нибудь, если текущая Group раскрыта } else{ //Изменяем что-нибудь, если текущая Group скрыта } TextView textGroup = (TextView) convertView.findViewById(R.id.textGroup); textGroup.setText("Group " + Integer.toString(groupPosition)); return convertView; } @Override public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { if (convertView == null) { LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); convertView = inflater.inflate(R.layout.child_view, null); } TextView textChild = (TextView) convertView.findViewById(R.id.textChild); textChild.setText(mGroups.get(groupPosition).get(childPosition)); Button button = (Button)convertView.findViewById(R.id.buttonChild); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Toast.makeText(mContext,"button is pressed",5000).show(); } }); return convertView; } @Override public boolean isChildSelectable(int groupPosition, int childPosition) { return true; } }
los nombres de los métodos y los parámetros es muy informativo. Métodos getGroupView y getChildView devuelve Ver para p parents
y children
consecuencia. usando el parámetro isExpanded en el método getGroupView, podemos ca, por ejemplo, cambiar la parte posterior del grupo en diferentes estados. usando LayoutInflater usamos diseño personalizado para nuestra lista.
group_view.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:id="@+id/textGroup" android:layout_width="wrap_content" android:layout_height="50dp" android:layout_marginLeft="5dp" android:layout_marginTop="20dp" android:textColor="@android:color/white" android:textStyle="bold" /> </LinearLayout>
child_view.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:id="@+id/textChild" android:layout_width="wrap_content" android:layout_height="40dp" android:layout_marginLeft="20dp" android:layout_marginTop="20dp" android:textColor="@android:color/white" /> <Button android:id="@+id/buttonChild" android:layout_width="100dp" android:layout_height="40dp" android:layout_marginLeft="150dp" android:layout_marginTop="10dp" android:text="Button" android:focusable="false" /> </LinearLayout>
en la vista secundaria añadimos un botón, en el método de adaptador getChildView controlando su presionado. de la misma manera podemos agregar botones y otros elementos en group_view.xml.
también, podemos fijar los oyentes a nuestra lista.
• OnChildClickListener – presionando un elemento • OnGroupCollapseListener – colapsando el grupo • OnGroupExpandListener – expandiendo el grupo • OnGroupClickListener – presione en el grupo
ahora vamos a mirar groupIndicater – indicador del estado del grupo. es la colocación señalada en main.xml con los parámetros indicatorLeft, indicatorRigh – correspondiente al borde izquierdo y derecho. por defecto el indicador colocado en el lado izquierdo, lo que no es tan genial.
también podemos añadir imágenes personalizadas, para eso, necesitamos añadir indicador.xml en la carpeta dibujable con este código.
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_expanded="true" android:drawable="@drawable/imageOpen"> </item> <item android:state_empty="true" android:drawable="@drawable/imageClose"> </item> </selector>
donde imageOpen es para el grupo expandido imageClose es para el grupo colapsado
la próxima vez que necesitamos agregar una fila para los parámetros de nuestra lista en main.xml
android:groupIndicator="@drawable/indicator"
- Trabajo de newSingleThreadScheduledExecutor, si el hilo ya está ocupado
- Android Aplicar efecto en el marco de la cámara