J'ai un ListView, où j'ai changé l'apparence de la ligne, mais listview ont la taille d'une ligne, au lieu de plein écran.
list_item.xml:
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:tools="http://schemas.Android.com/tools"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:orientation="vertical" >
<TextView
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"/>
<LinearLayout
Android:layout_width="fill_parent"
Android:layout_height="wrap_content" >
<TextView
Android:id="@+id/textView_news_time"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:gravity="center"
Android:textColor="#0082A8" />
<TextView
Android:id="@+id/textView_news_header"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content" />
</LinearLayout>
<TextView
Android:layout_width="fill_parent"
Android:layout_height="wrap_content" />
</LinearLayout>
tab_news.xml:
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:tools="http://schemas.Android.com/tools"
Android:layout_width="wrap_content"
Android:layout_height="fill_parent"
Android:orientation="vertical" >
<ListView
Android:id="@+id/list_news"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent" >
</ListView>
</LinearLayout>
Faire l'adaptateur:
public class RSSAdapter extends ArrayAdapter<RSSitem> {
Context context;
int layoutResourceId;
ArrayList<RSSitem> data = null;
SimpleDateFormat sdf = new SimpleDateFormat("kk:mm ");
public RSSAdapter(Context context, int layoutResourceId, ArrayList<RSSitem> data) {
super(context, layoutResourceId, data);
this.layoutResourceId = layoutResourceId;
this.context = context;
this.data = data;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View row = convertView;
NewsHolder holder = null;
if(row == null)
{
LayoutInflater inflater = ((Activity)context).getLayoutInflater();
row = inflater.inflate(layoutResourceId, parent, false);
holder = new NewsHolder();
holder.txtTime = (TextView)row.findViewById(R.id.textView_news_time);
holder.txtNews = (TextView)row.findViewById(R.id.textView_news_header);
row.setTag(holder);
}
else
{
holder = (NewsHolder)row.getTag();
}
RSSitem item = data.get(position);
holder.txtTime.setText(sdf.format(item.getPubDate()));
holder.txtNews.setText(item.getTitle());
return row;
}
static class NewsHolder
{
TextView txtTime;
TextView txtNews;
}
Les articles défilent.
Désolé pour mon mauvais anglais. Merci pour l'aide
Les conseils de @Varun n'ont pas aidé
J'ai trouvé une erreur. Merci. Répondre en "réponses")
J'ai trouvé une erreur. tab_news était dans ScrollView of TabHost . Erreur si stupide ( Merci pour l'aide.
Mise à jour:ListView
ne doit pas être underScrollView
in xml . Si c'est le cas, le même problème se produit.
Mise à jour 2: Vous pouvez utiliser NestedScrollView
Si vous utilisez ListView dans ScrollView, vous avez ce problème. Et ma solution est la suivante:
1. Créer une liste personnalisée qui ne peut pas défiler
public class NonScrollListView extends ListView {
public NonScrollListView(Context context) {
super(context);
}
public NonScrollListView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public NonScrollListView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int heightMeasureSpec_custom = MeasureSpec.makeMeasureSpec(
Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, heightMeasureSpec_custom);
ViewGroup.LayoutParams params = getLayoutParams();
params.height = getMeasuredHeight();
}
}
2. Utiliser la classe personnalisée ci-dessus pour un fichier xml
<xx.xx.NonScrollListView
Android:id="@+id/lv_nonscroll_list"
Android:layout_width="match_parent"
Android:layout_height="wrap_content" >
</xx.xx.NonScrollListView>
Cela a bien fonctionné sur toutes les versions d'OS pour moi… __. J'espère le meilleur pour vous.
Dans le parent de list_item.xml
, LinearLayout
, vous utilisez Android:layout_height="fill_parent"
Évidemment, cela va se développer verticalement.
OU:
utilisez l'outil monitor
, allez à hierarchy viewer
, examinez le modèle en cours d'exécution en détail. Recherchez la vue présentant le problème, vérifiez que ses attributs/propriétés sont corrects, passez à la vue parent et vérifiez-la jusqu'à trouver le problème.
Je pense que Listview ne prend qu'un seul enregistrement de vos données. Il suffit de vérifier que vous avez toutes les données que vous souhaitez afficher dans Listview.
OR
Veuillez vérifier votre list_item.xml, Remplacer
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:tools="http://schemas.Android.com/tools"
Android:layout_width="fill_parent"
Android:layout_height="**wrap_content**"
Android:orientation="vertical" >
au lieu de,
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:tools="http://schemas.Android.com/tools"
Android:layout_width="fill_parent"
Android:layout_height="**fill_parent**"
Android:orientation="vertical" >
La modification dynamique de la hauteur donne la plupart du temps à NPE ... la meilleure solution consiste à créer une vue de liste personnalisée non défilable. Vous trouverez beaucoup de codes pour cela.