15

Soy muy nuevo en el desarrollo de Android. Estoy tratando de crear una aplicación con etiquetas (que se agregan a través de fragmentos). En uno de los fragmentos, estoy tratando de mostrar una lista. Esta lista se ha llenado usando ListAdapter, que extendí desde ArrayAdapter y he sobrecargado el método getView(). Este es mi fragmentoEl método getView() de ArrayAdapter no se llama

public class tabcontentActivity extends Fragment { 

    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
     if (container == null) { 
      return null; 
     } 
     View v = (LinearLayout) inflater.inflate(R.layout.tablayout, container, 
      false); 
     ListView lv = (ListView) v.findViewById(R.id.listview1); 
     ListViewAdapter adapter = new ListViewAdapter(container.getContext(), 
      android.R.layout.simple_list_item_1, R.id.textview1); 
     adapter.notifyDataSetChanged(); 
     lv.setAdapter(adapter); 

     return v; 
    } 
} 

Y así es como he implementado el ListAdapter

public class ListViewAdapter extends ArrayAdapter { 
    Context context1; 

    public ListViewAdapter(Context context,int resource, int textViewResourceId) { 
     super(context,resource,textViewResourceId); 
     this.context1 = context; 
     System.out.println("here aswell!!!!!!"); 
     // TODO Auto-generated constructor stub 
    } 

    public View getView(int arg0, View convertView, ViewGroup arg2) { 
     // TODO Auto-generated method stub 
     System.out.println("@@@I AM [email protected]@@"); 
     LayoutInflater inflater = LayoutInflater.from(context1); 
     convertView = inflater.inflate(R.layout.tablayout, null); 

     TextView wv = (TextView) convertView.findViewById(R.id.textview1); 
     String summary = "<html><body><h1>This is happening!!!</h1></body></html>"; 
     wv.setText(Html.fromHtml(summary)); 

     convertView.setTag(wv); 

     return convertView; 
    } 
} 

El xml diseño es

<?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:orientation="vertical" > 

    <ListView 
     android:id="@+id/listview1" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" > 
    </ListView> 

    <TextView 
     android:id="@+id/textview1" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:text="myreader" /> 

</LinearLayout> 

Por favor, ayúdame a encontrar un camino por el cual pueda hacer que esto funcione

Respuesta

48

Sólo se olvidó de proporcionar los datos al constructor y luego hacer la llamada correcta dentro del constructor:

public ListViewAdapter(Context context,int resource, int textViewResourceId, List<YourObjectType> items) { 
    super(context,resource,textViewResourceId, items); 
    this.context1 = context; 
    // TODO Auto-generated constructor stub 
} 
+2

Omg gracias. Esto me ayudó ...! – jonassvensson

+0

'super (context, viewResourceId, items);' esto también funcionó para mí –

1
adapter.notifyDataSetChanged(); 
    lv.setAdapter(adapter); 

intercambiar las posiciones

Layoutinflator=getLayoutInflator(); 
2

parece que no se ha especificado un origen de datos para su adaptador. Una fuente de datos es cualquier cosa que proporciona datos para mostrar, por ejemplo, una lista de arrays o un cursor. Si no hay datos de una fuente de datos, getview() no se llamará en absoluto.

16

No le está suministrando ningún dato actualmente. Si aún desea ver qué sucede en la lista, anule la función getCount().

Creo que es algo de este tipo.

public int getCount(){ 
    return 1; 
} 

Esto dibujará un elemento en su lista. Y también llame a su getView(). Y una vez que descubra cómo suministrar su fuente de datos, cambie el getCount() por el tamaño de su lista. ¿Quieres crear un tutorial aquí

http://www.shubhayu.com/android/listview-with-arrayadapter-and-customized-items

0
 public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
    if (container == null) { 
     View v = (LinearLayout) inflater.inflate(R.layout.tablayout, container, 
       false); 
     ListView lv = (ListView) v.findViewById(R.id.listview1); 
    ListViewAdapter adapter = new ListViewAdapter(container.getContext(), 
     android.R.layout.simple_list_item_1, R.id.textview1); 
    adapter.notifyDataSetChanged(); 
    lv.setAdapter(adapter); 
    } 
    else{ 
    View v = (LinearLayout) inflater.inflate(R.layout.tablayout, container, 
     false); 
     ListView lv = (ListView) v.findViewById(R.id.listview1); 
    ListViewAdapter adapter = new ListViewAdapter(container.getContext(), 
     android.R.layout.simple_list_item_1, R.id.textview1); 
    adapter.notifyDataSetChanged(); 
    lv.setAdapter(adapter); 
} 
return v; 
} 

y reemplazar el método getCount

public int getCount(){ 
    return 100; 
    } 
6

Cuando estamos creando una costumbre ArrayAdapter debemos estar utilizando ya sea

public ArrayAdapter (Context context, int textViewResourceId, T[] objects) 

public ArrayAdapter (Context context, int resource, int textViewResourceId, T[] objects) 

public ArrayAdapter (Context context, int textViewResourceId, List<T> objects) 

public ArrayAdapter (Context context, int resource, int textViewResourceId, List<T> objects) 

si estamos no usando el adaptador mencionado anteriormente, necesitamos anular el método getCount().

Cuestiones relacionadas