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:

<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.

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:

introduzca la descripción de la imagen aquí

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" 
  • Android cómo agrupar tareas asíncronas como en iOS
  • Error invocar método virtual 'doble android.location.Location.getLatitude ()' en una referencia de objeto nulo
  • Convertir objeto nulo en String
  • ¿Cómo crear un directorio en Android?
  • Lenguaje de programación personalizado (jar) en Android
  • Cómo agregar un marcador pin en la vista de la imagen en android
  • Android: manejar la desconexión inesperada de Internet durante la descarga de datos
  • No se pudo ejecutar dex y Conversión al formato Dalvik.
  • Android Studio preDexDebug después de agregar jar archivo
  • Mostrar decimal de un doble solo cuando sea necesario
  • Biblioteca java vs biblioteca android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.