Android Listview show only one item

北战南征 提交于 2019-12-17 18:27:40

问题


I have a ListView, where i changed appearence of row, but listview have size of one row, instead of fullscreen.

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>

Making Adapter:

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

Items are scrolling.

Sorry for bad English. Thanks for help

Advice of @Varun didn't help

I found mistake. Thanks. Answer in "answers")


回答1:


I Found mistake. tab_news was in ScrollView of TabHost. So stupid mistake( Thanks for help.

Update:ListView must not be underScrollView in xml. If it is,the same problem occurs.

Update 2 :You may use NestedScrollView




回答2:


If you use ListView inside ScrollView, you have this issue. And my solution is following as:

1. Create a custom listview which is non scrollable

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. Use above custom class for xml file

  <xx.xx.NonScrollListView
        android:id="@+id/lv_nonscroll_list"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >
    </xx.xx.NonScrollListView>

It worked well on all OS-version for me. Hope best for you.




回答3:


In list_item.xml's parent LinearLayout, you are using android:layout_height="fill_parent" Obviously it is going to expand vertically.

OR:

use monitor tool, go to hierarchy viewer, inspect the running Layout in detail. Find the View with problem, check its attributes/properties are correct, move to its parent View and check it, until you find the issue.




回答4:


I think Listview is taking only one record from your data. Just check that have you got all the data, which you are keen to show in Listview.

OR

Please check your list_item.xml, Replace

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

instead of,

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



回答5:


Changing the height dynamically gives NPE most of the times... the best solution is to create a custom list view that is non scrollable. You'll find a lot of codes for that.



来源:https://stackoverflow.com/questions/18411494/android-listview-show-only-one-item

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!