web-dev-qa-db-fra.com

La méthode getView () de ArrayAdapter n'est pas appelée

Je suis très nouveau dans le développement Android. J'essaie de construire une application avec des balises (qui sont ajoutées par des fragments). Dans l'un des fragments, j'essaie d'afficher une liste. Cette liste a été remplie à l'aide de ListAdapter que j'ai étendu de ArrayAdapter et que j'ai surchargé la méthode getView (). Ceci est mon fragment.

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;
    }
}

Et voici comment j'ai implémenté le 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 HERE@@@");
        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;
    }
}

La mise en page XML est

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

Aidez-moi s'il vous plaît à trouver un moyen par lequel je peux faire ce travail.

15
user1272934

Vous avez simplement oublié de fournir les données au constructeur, puis de faire l'appel correct dans le constructeur:

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

Vous ne lui fournissez aucune donnée actuellement. Si vous voulez toujours voir ce qui se passe dans la liste, remplacez la fonction getCount ().

Je pense que c'est quelque chose de ce genre.

public int getCount(){
    return 1;
}

Cela attirera un élément de votre liste. Et appelez également votre getView (). Et une fois que vous avez découvert comment alimenter votre source de données, remplacez getCount () par la taille de votre liste. Découvrez un tutoriel ici

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

18
Shubhayu

Lorsque nous créons un tableau personnalisé, nous devons utiliser soit

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 nous n'utilisons pas l'adaptateur mentionné ci-dessus, nous devons redéfinir la méthode getCount ().

8
siva

il semble que vous n'ayez pas spécifié de source de données pour votre adaptateur. Une source de données est tout ce qui fournit des données à afficher, par exemple une liste ou un curseur. S'il n'y a aucune donnée d'une source de données, getview () ne sera pas appelé du tout.

2
Akhil
  adapter.notifyDataSetChanged();
  lv.setAdapter(adapter);

échanger les positions 

Layoutinflator=getLayoutInflator();
1
Aashish Bhatnagar
       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;
}

et surcharger la méthode getcount

 public int getCount(){
    return 100;
  }
0
Nikhil Lamba