如何将列表视图限制为特定数量的列表项



我正在开发一个功能,我有一个列表视图,我希望列表视图只显示 3 个项目。我已将ListView高度设置为"wrap_content">,并且在适配器中我将get计数设置为3,以便它仅显示3个项目,但仅显示1个项目。我无法弄清楚发生了什么。我的 API 只重新处理 3 个项目,但无法显示列表视图中的所有项目。

适配器代码:

  public class Adapter3Testimonials extends BaseAdapter {

private Activity activity;
private ArrayList<HashMap<String, String>> data;
private static LayoutInflater inflater = null;
private Context context;
public Adapter3Testimonials(Activity a, ArrayList<HashMap<String, String>> d) {
    activity = a;
    this.data = d;
    context = a;
    inflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
public int getCount() {
    return data.size();
}
public Object getItem(int position) {
    return position;
}
public long getItemId(int position) {
    return position;
}
public View getView(final int position, View convertView, ViewGroup parent) {
    View itemView = inflater.inflate(R.layout.item_3_testimonials, parent, false);
    TextView txtTestimonial = (TextView) itemView.findViewById(R.id.txtAdvisorTestimonails);

    Log.e("TAG", "item_3_testimonials: " + position);
    HashMap<String, String> testimonialsList;
    testimonialsList = new HashMap<String, String>();
    testimonialsList = data.get(position);
    txtTestimonial.setText(testimonialsList.get("description"));

    return itemView;
}

  }

Xml:

          <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">

<ScrollView
    android:id="@+id/scrollView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="@dimen/dp10"
        android:orientation="vertical">

        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginLeft="@dimen/dp5">
            <FrameLayout
                android:id="@+id/layImageProfile"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginRight="@dimen/dp5"
                android:background="@drawable/half_blue_circle">
                <de.hdodenhof.circleimageview.CircleImageView xmlns:app="http://schemas.android.com/apk/res-auto"
                    android:id="@+id/profile_image"
                    android:layout_width="@dimen/dp80"
                    android:layout_height="@dimen/dp80"
                    android:padding="@dimen/dp2"
                    android:src="@drawable/blank_profile" />
                <de.hdodenhof.circleimageview.CircleImageView xmlns:app="http://schemas.android.com/apk/res-auto"
                    android:id="@+id/profile_image2"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:src="@drawable/ic_launcher_background"
                    android:visibility="gone"
                    app:civ_border_width="2dp" />
                <ImageView
                    android:id="@+id/imgBlockUser"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_alignLeft="@id/profile_image2"
                    android:layout_gravity="right"
                    android:src="@drawable/phone" />
            </FrameLayout>

            <TextView
                android:id="@+id/txtName"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentTop="true"
                android:layout_marginLeft="@dimen/dp13"
                android:layout_toRightOf="@+id/layImageProfile"
                android:text="John doe"
                android:textColor="@android:color/black"
                android:textSize="@dimen/dp15" />
            <TextView
                android:id="@+id/txtFirmName"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignLeft="@id/txtName"
                android:layout_alignStart="@id/txtName"
                android:layout_below="@id/txtName"
                android:text="Demo Corp. Inc."
                android:textColor="@android:color/black" />
            <TextView
                android:id="@+id/txtRnf"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignLeft="@id/txtFirmName"
                android:layout_alignStart="@id/txtFirmName"
                android:layout_below="@id/txtFirmName"
                android:text="Rnf No #12234"
                android:textColor="@android:color/black" />
            <com.iarcuschin.simpleratingbar.SimpleRatingBar
                android:id="@+id/imgReviewStarts"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignLeft="@id/txtRnf"
                android:layout_below="@id/txtRnf"
                android:layout_marginTop="@dimen/dp5"
                android:layout_toRightOf="@id/layImageProfile"
                app:srb_borderColor="@color/colorPrimary"
                app:srb_fillColor="@color/colorPrimary"
                app:srb_isIndicator="true"
                app:srb_numberOfStars="5"
                app:srb_starBorderWidth="1.0"
                app:srb_starCornerRadius="2.5"
                app:srb_starSize="@dimen/dp15"
                app:srb_stepSize="1" />

            <ImageView
                android:id="@+id/imgClickToConnect"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentRight="true"
                android:layout_centerVertical="true"
                android:layout_marginRight="@dimen/dp25"
                android:src="@drawable/click" />
        </RelativeLayout>
        <View
            android:layout_width="match_parent"
            android:layout_height="@dimen/dp1"
            android:layout_marginTop="@dimen/dp10"
            android:background="@color/colorPrimary" />
        <TextView
            android:id="@+id/txtStatement"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="@dimen/dp5"
            android:background="@color/colorPrimary"
            android:paddingBottom="@dimen/dp5"
            android:paddingLeft="@dimen/dp5"
            android:paddingTop="@dimen/dp3"
            android:text="Mission statement Lorum ipsum dolar sit or elit lamet,consector cillium"
            android:textColor="@android:color/white" />
        <View
            android:layout_width="match_parent"
            android:layout_height="@dimen/dp1"
            android:layout_marginTop="@dimen/dp5"
            android:background="@color/colorPrimary" />
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="@dimen/dp5"
            android:paddingLeft="@dimen/dp10"
            android:text="@string/customer_review_score"
            android:textColor="@android:color/black"
            android:textSize="@dimen/dp15" />
        <ProgressBar
            style="?android:attr/progressBarStyleHorizontal"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:paddingLeft="@dimen/dp10"
            android:progress="100"
            android:progressTint="@android:color/black" />

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginLeft="@dimen/dp10"
            android:orientation="horizontal">
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/buying_exp" />
            <com.iarcuschin.simpleratingbar.SimpleRatingBar
                android:id="@+id/imgBuyingExp"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_below="@id/txtRnf"
                android:layout_marginLeft="@dimen/dp20"
                app:srb_borderColor="@color/colorPrimary"
                app:srb_fillColor="@color/colorPrimary"
                app:srb_isIndicator="true"
                app:srb_numberOfStars="5"
                app:srb_starBorderWidth="1.0"
                app:srb_starCornerRadius="2.5"
                app:srb_starSize="@dimen/dp15"
                app:srb_stepSize="1" />

        </LinearLayout>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginLeft="@dimen/dp10"
            android:orientation="horizontal">
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/knowledge_comp" />

            <com.iarcuschin.simpleratingbar.SimpleRatingBar
                android:id="@+id/imgKnowledgeComp"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_below="@id/txtRnf"
                android:layout_marginLeft="@dimen/dp20"
                app:srb_borderColor="@color/colorPrimary"
                app:srb_fillColor="@color/colorPrimary"
                app:srb_isIndicator="true"
                app:srb_numberOfStars="5"
                app:srb_starBorderWidth="1.0"
                app:srb_starCornerRadius="2.5"
                app:srb_starSize="@dimen/dp15"
                app:srb_stepSize="1" />

        </LinearLayout>

        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginLeft="@dimen/dp10"
            android:orientation="horizontal"
            android:weightSum="1">
            <TextView
                android:id="@+id/txt"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="0.9"
                android:text="@string/percentage_of_customer" />
            <TextView
                android:id="@+id/txtPercentageRecommended"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center_vertical"
                android:layout_marginLeft="@dimen/dp20"
                android:layout_toRightOf="@id/txt"
                android:text="100%" />
        </RelativeLayout>

        <View
            android:layout_width="match_parent"
            android:layout_height="@dimen/dp1"
            android:layout_marginTop="@dimen/dp10"
            android:background="@color/colorPrimary" />
        <LinearLayout
            android:id="@+id/layTestimonials"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="@dimen/dp5"
            android:background="@color/colorPrimary"
            android:orientation="vertical">
            <RelativeLayout
                android:layout_width="wrap_content"
                android:layout_height="wrap_content">
                <TextView
                    android:id="@+id/textView"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:paddingLeft="@dimen/dp10"
                    android:paddingTop="@dimen/dp10"
                    android:text="@string/customer_testimonials"
                    android:textColor="@android:color/white"
                    android:textSize="@dimen/dp15" />
                <TextView
                    android:id="@+id/btnTestimonialNumber"
                    android:layout_width="@dimen/dp35"
                    android:layout_height="@dimen/dp35"
                    android:layout_gravity="center_vertical"
                    android:layout_marginLeft="@dimen/dp10"
                    android:layout_marginTop="@dimen/dp5"
                    android:layout_toRightOf="@id/textView"
                    android:background="@drawable/round_button"
                    android:padding="@dimen/dp5"
                    android:text=""
                    android:textAlignment="center"
                    android:textColor="@color/colorPrimary" />
                <ProgressBar
                    style="?android:attr/progressBarStyleHorizontal"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_below="@id/textView"
                    android:paddingLeft="@dimen/dp10"
                    android:progress="100"
                    android:progressTint="@android:color/white" />

            </RelativeLayout>
            <TextView
                android:id="@+id/noTestimonial"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:layout_marginBottom="@dimen/dp20"
                android:layout_marginTop="@dimen/dp20"
                android:gravity="center"
                android:text="@string/no_testimonials"
                android:textColor="@android:color/white"
                android:visibility="gone" />
            <ListView
                android:id="@+id/listCustomer_testimonial"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginLeft="@dimen/dp10"
                android:layout_marginTop="@dimen/dp10"
                android:divider="@android:color/white">
            </ListView>
        </LinearLayout>
        <View
            android:layout_width="match_parent"
            android:layout_height="@dimen/dp1"
            android:layout_marginTop="@dimen/dp5"
            android:background="@color/colorPrimary" />
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="@dimen/dp10"
            android:orientation="horizontal">
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:paddingLeft="@dimen/dp5"
                android:text="Years of experience:"
                android:textColor="@android:color/black" />
            <TextView
                android:id="@+id/txtAdExperience"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="@dimen/dp8"
                android:text="2" />
        </LinearLayout>
        <TextView
            android:id="@+id/txtExpertise"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:paddingLeft="@dimen/dp5"
            android:text="@string/expertise"
            android:textColor="@android:color/black"
            android:visibility="gone" />
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:layout_marginTop="@dimen/dp5"
            android:orientation="horizontal">
            <TextView
                android:id="@+id/btnProtect_money"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="@dimen/dp5"
                android:background="@drawable/bg_skyblue"
                android:padding="@dimen/dp5"
                android:text="@string/protect_money"
                android:textAllCaps="false"
                android:textColor="@android:color/white"
                android:visibility="gone" />
            <TextView
                android:id="@+id/btnGrow_money"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="@dimen/dp5"
                android:background="@drawable/bg_skyblue"
                android:padding="@dimen/dp5"
                android:text="@string/grow_money"
                android:textColor="@android:color/white"
                android:visibility="gone" />
            <TextView
                android:id="@+id/btnMedical_Needs"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="@dimen/dp5"
                android:background="@drawable/bg_skyblue"
                android:padding="@dimen/dp5"
                android:text="@string/medical_need"
                android:textColor="@android:color/white"
                android:visibility="gone" />
        </LinearLayout>
        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:layout_marginBottom="@dimen/dp15"
            android:layout_marginLeft="@dimen/dp10"
            android:layout_marginTop="@dimen/dp10">
            <TextView
                android:id="@+id/txtSocialMedia"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/find_me_on_social_media"
                android:textColor="@android:color/black"
                android:textSize="@dimen/dp15" />

            <ImageView
                android:id="@+id/imgFB"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_below="@id/txtSocialMedia"
                android:layout_marginTop="@dimen/dp10"
                android:src="@drawable/fb_icon" />
            <ImageView
                android:id="@+id/imgYoutube"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_below="@id/txtSocialMedia"
                android:layout_marginLeft="@dimen/dp5"
                android:layout_marginTop="@dimen/dp10"
                android:layout_toRightOf="@id/imgFB"
                android:src="@drawable/youtube_icon" />
            <ImageView
                android:id="@+id/imgLinkden"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_below="@id/txtSocialMedia"
                android:layout_marginLeft="@dimen/dp5"
                android:layout_marginTop="@dimen/dp10"
                android:layout_toRightOf="@id/imgYoutube"
                android:src="@drawable/linkedin_icon" />
            <ImageView
                android:id="@+id/imgRSS"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_below="@id/txtSocialMedia"
                android:layout_marginLeft="@dimen/dp5"
                android:layout_marginTop="@dimen/dp10"
                android:layout_toRightOf="@id/imgLinkden"
                android:src="@drawable/rss_icon" />

            <ImageView
                android:id="@+id/imgCartoon"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentBottom="true"
                android:layout_alignParentRight="true"
                android:layout_toRightOf="@id/txtSocialMedia"
                android:src="@drawable/man_after_feedback" />

            <ImageView
                android:id="@+id/imgRead_my_articles"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentBottom="true"
                android:layout_below="@id/imgFB"
                android:layout_marginTop="@dimen/dp10"
                android:src="@drawable/read_my_articles" />
            <ImageView
                android:id="@+id/imgClick_for_feedback"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentRight="true"
                android:layout_below="@id/imgFB"
                android:layout_marginRight="@dimen/dp10"
                android:layout_marginTop="@dimen/dp10"
                android:src="@drawable/click_for_feedback" />

        </RelativeLayout>
    </LinearLayout>
</ScrollView>
<ProgressBar
    android:id="@+id/pBar"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerInParent="true"
    android:visibility="gone" />

在此代码中,我有 ID 为"listCustomer_testimonial"的列表视图。

切勿在 Scrollview 中使用 ListView。但是,如果必须在 ScrollView 中使用 ListView,请创建一个滚动处理程序。

public class scrollhandler {
    public static void getListViewSize(ListView myListView) {
        ListAdapter myListAdapter = myListView.getAdapter();
        if (myListAdapter == null) {
            //do nothing return null
            return;
        }
        //set listAdapter in loop for getting final size
        int totalHeight = 0;
        int rowheight=56;
        for (int size = 0; size < myListAdapter.getCount(); size++) {
            View listItem = myListAdapter.getView(size, null, myListView);
            listItem.measure(0, 0);
            totalHeight += listItem.getMeasuredHeight();
            rowheight=listItem.getMeasuredHeight();
        }
        //setting listview item in adapter
        ViewGroup.LayoutParams params = myListView.getLayoutParams();
       params.height = totalHeight + (myListView.getDividerHeight() * (myListAdapter.getCount() - 1));
        myListView.setLayoutParams(params);
        // print height of adapter on log
        Log.i("height of listItem:", String.valueOf(totalHeight)+","+myListAdapter.getCount());
    }
}

然后最后将列表视图与处理程序绑定

lv.setAdapter(adapter);
scrollhandler.getListViewSize(lv);

您的问题不在于getCount()方法或列表项计数。

您在 scrollview 中使用了listview,因此只有一个项目可见,其他项目可以在滚动时看到。

您可以使用自定义Listview来避免列表视图高度的问题,

public class NonScrollableListview extends ListView {
public NonScrollableListview(Context context) {
    super(context);
}
public NonScrollableListview(Context context, AttributeSet attrs) {
    super(context, attrs);
}
public NonScrollableListview(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();
}
}

在你的 xml 中,

<com.yourpack.NonScrollableListview
    android:id="@+id/list_detail"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />

或者将NestedScrollViewRecyclerView一起使用,而不是列表视图。

<android.support.v4.widget.NestedScrollView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    android:fillViewport="true">
    <!--otherviews-->
     <android.support.v7.widget.RecyclerView
                android:id="@+id/list_detail"
                android:layout_width="match_parent"
                android:layout_height="wrap_content" />
    <!--otherviews-->
</android.support.v4.widget.NestedScrollView>

最新更新