Android – LazyAdapter vistas superpuestas

Estoy haciendo lazyloading para mostrar imágenes y texto. Lo tengo todo y ahora, tratando de añadir un texto en la vista. Sin embargo, mi adaptador se superpone a mi vista. Términos más simples es que, la vista de lista se superpone a la vista de texto. No estoy seguro de dónde lo estoy haciendo mal, porque el ejemplo original es capaz de mostrar un botón justo debajo de la lista, pero no lo estoy. No estoy recibiendo errores. Mi lista sólo cubre toda la pantalla. ¿Alguna idea de cuál podría ser el problema?

Mainjava

public class main extends Activity { private static final String targetURL ="http://www.google.com/images"; ListView list; ProgressDialog dialog; private String[] mStrings = {}; private String[] dStrings = {}; //TextView tv; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); new TheTask().execute(); list=(ListView)findViewById(R.id.list); TextView tv = (TextView)findViewById(R.id.tv); //tv.setText("Text View is displayed"); } protected class TheTask extends AsyncTask<Void, Void, MyResultClass >{ protected void onPreExecute() { dialog = ProgressDialog.show(Cats.this, "Retrieving Information", "Please wait for few seconds...", true, false); dialog.setCancelable(true); } protected MyResultClass doInBackground(Void... params) { searchContent(); MyResultClass result = new MyResultClass(); result.mStrings = mStrings; result.dStrings = dStrings; return result; } protected void onPostExecute(MyResultClass result) { dStrings = result.dStrings; mStrings = result.mStrings; LazyAdapter adapter = new LazyAdapter(Cats.this, mStrings, dStrings); list.setAdapter(adapter); dialog.dismiss(); } } class MyResultClass { public String[] mStrings; public String[] dStrings; } public void searchContent() { String imageC = ""; String textC = ""; try { URL url = new URL(targetURL); // Make the connection URLConnection conn = url.openConnection(); BufferedReader reader = new BufferedReader( new InputStreamReader(conn.getInputStream())); String line = reader.readLine(); Pattern sChar = Pattern.compile("&.*?;"); line.replaceAll("\\<.*?\\>", ""); Matcher msChar = sChar.matcher(line); while (msChar.find()) line = msChar.replaceAll(""); while (line != null) { if(line.contains("../../")) { int startIndex = line.indexOf("../../") + 6; int endIndex = line.indexOf(">", startIndex + 1); String abc = "http://www.google.com/"; String imageSrc = line.substring(startIndex,endIndex); //complete full url String xyz = abc +imageSrc; xyz = xyz.substring(0,xyz.indexOf('"')); xyz = xyz +";"; xyz = xyz.replaceAll(" ", "%20"); imageC += xyz; mStrings = imageC.split(";"); line = reader.readLine(); } if(line.contains("../../") == false) { line = reader.readLine(); } if (line.contains("Gnametag")) { int startIndex = line.indexOf("Gnametag") + 10; int endIndex = line.indexOf("<", startIndex + 1); String gname = line.substring(startIndex,endIndex); textC = textC.replaceAll("</span>", ""); textC += "Name: "+gname+ "\n"; } if (line.contains("Age")) { textC += "Age: "+reader.readLine() + "\n" + ";"; textC = textC.replaceAll(" ", ""); dStrings = textC.split(";"); } if (line.contains("Last Update")) { reader.close(); } } // Close the reader reader.close(); } catch (Exception ex) { ex.printStackTrace(); } } } 

Adapter.java

 public View getView(int position, View convertView, ViewGroup parent) { View vi=convertView; ViewHolder holder; if(convertView==null){ vi = inflater.inflate(R.layout.item, null); holder=new ViewHolder(); holder.text=(TextView)vi.findViewById(R.id.text);; holder.image=(ImageView)vi.findViewById(R.id.image); vi.setTag(holder); } else holder=(ViewHolder)vi.getTag(); holder.text.setText(text[position]); holder.image.setTag(data[position]); imageLoader.DisplayImage(data[position], activity, holder.image); return vi; } 

Item.xml (utilizado por Adapter.java)

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="#FFFFFF"> <ImageView android:id="@+id/image" android:layout_width="90dip" android:layout_height="90dip" android:src="@drawable/stub" android:scaleType="centerCrop" android:layout_gravity="left|center_vertical" /> <TextView android:id="@+id/text" android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="center" android:textSize="15dip"/> </LinearLayout> 

Main.xml

 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="#FFFFFF"> <LinearLayout android:id="@+id/linear1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="#FFFFFF"> <TextView android:id="@+id/tv" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Testing 123" /> </LinearLayout> <LinearLayout android:id="@+id/linear2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/linear1" android:background="#FFFFFF"> <ListView android:id="@+id/list" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginBottom="30dp"/> </LinearLayout> </RelativeLayout> 

Simplemente quite el símbolo + de esta línea

 android:layout_below="@+id/linear1" 

En segunda estrofa de disposición lineal.

Cuando dice que el ListView cubre toda la pantalla, ¿se refiere al resultado en un teléfono real o, por ejemplo, la vista previa en Eclipse? Si se muestra correctamente en el último, entonces probablemente el problema está en algún lugar de su código Java.

De todos modos, no parece ser capaz de reproducir su problema en cualquiera de los dos. Sin embargo, hay dos cosas que intentaría:

Primero, cambie el orden de las llamadas en el método onCreate() de su Actividad. Específicamente, no ejecute su AsyncTask hasta después de haber inicializado ListView, ya que lo está utilizando en el onPostExecute() . Aunque esto probablemente no hará una diferencia, es mejor evitar cualquier oportunidad en una condición de carrera.

 public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); list=(ListView)findViewById(R.id.list); TextView tv = (TextView)findViewById(R.id.tv); // start task after 'list' is initialized. new TheTask().execute(); } 

En segundo lugar, el archivo de diseño que contiene su ListView es innecesariamente complicado. Preferentemente, desea mantener los diseños tan simples como sea posible y limitar el anidamiento para una jerarquía más plana. Usted podría simplemente deshacerse de los LinearLayouts abandonados, y, si prefiere trabajar con ellos, cambiar el padre a uno. Además, android:orientation="vertical" no es un atributo válido para un RelativeLayout, así que asegúrate de eliminarlo.

Igual RelativeLayout, pero sin LinearLayouts:

 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="#FFFFFF" > <TextView android:id="@+id/tv" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Testing 123" /> <ListView android:id="@+id/list" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_below="@+id/tv" android:layout_marginBottom="30dp" /> </RelativeLayout> 

El mismo comportamiento, pero con un LinearLayout como elemento raíz:

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="#FFFFFF" android:orientation="vertical" > <TextView android:id="@+id/tv" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Testing 123" /> <ListView android:id="@+id/list" android:layout_width="fill_parent" android:layout_height="0dp" android:layout_weight="1" android:layout_marginBottom="30dp" /> </LinearLayout> 

Añadir android:layout_alignParentTop="true" a su línea LinearLayout ( linear1 )

 <LinearLayout android:id="@+id/main_xml_linearlayout_one" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_alignParentTop="true" > <TextView android:id="@+id/main_xml_textview_text" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout> <LinearLayout android:id="@+id/main_xml_linearlayout_two" android:layout_below="@id/main_xml_linearlayout_one" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="#FFFFFF" > <ListView android:id="@+id/main_xml_listview_list" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginBottom="30dp"/> </LinearLayout> 

  • Superposición transparente GLSurfaceview en la vista existente en android?
  • Superposición de ScrollView durante la reproducción de vídeo
  • Agrega una superposición transparente mayor para aumentar el área de clic, sin cambiar el diseño.
  • Android: configuración del relleno en un fondo de imagen de superposición
  • Superposición sobre la barra de navegación en Android 4
  • Android: Si los marcadores se superponen entre sí en el mapa, el evento de clic se disparará para el último escondido
  • Mostrar una superposición de "ayuda" en un diseño de Android
  • Superposición de imagen en dos filas en una vista de lista
  • ¿Cómo almacenar en caché android.graphics.path o Bitmap cuando se usan Overlays?
  • Emular el botón Atrás con superposición en Android
  • Superposición de vista de aplicación de Android (HUD)
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.