آموزش قرار دادن listview در scrollview

سلام دوستان در این سری از آموزش برنامه نویسی اندروید به آموزش قرار دادن listview در scrollview در برنامه نویسی اندروید خواهیم پرداخت همانطور که می دانید به طور معمول قرار دادن listview در scrollview ندارد و ما باید یک کلاس سفارشی یا کمکی ایجاد کنیم تا زمانی که طول listview به پایان می رسد scroll مربوط به listview از کار افتاده و scrollview اصلی به کار افتد در ادامه با ما همراه باشید.
 
همانطور که گفتم باید یک کلاس کمی یا سفارشی ایجاد کنیم.
پس یک فایل جاوا به نام Helper.java ایجاد کرده و کدهای زیر را در آن قرار دهید.

package ir.programchi;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ListAdapter;
import android.widget.ListView;
public class Helper {
    public static void getListViewSize(ListView myListView) {
        ListAdapter myListAdapter = myListView.getAdapter();
        if (myListAdapter == null) {
            return;
        }
        int totalHeight = 0;
        for (int size = 0; size < myListAdapter.getCount(); size++) {
            View listItem = myListAdapter.getView(size, null, myListView);
            listItem.measure(0, 0);
            totalHeight += listItem.getMeasuredHeight();
        }
        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));
    }
}

در بالا ما باید سایز کل listview را به دست بیاریم تا scrollview اصلی ما تا اینجا کار نکند سپس بعد از اینکه scroll درون listview تمام شد بیایم و scrollview اصلی را به کار بیندازیم برای این منظور طول کل listview در ابتدا با استفاده از این کد به دست می آید.
در layout اصلی خود که در اینجا نام آن برابر با main.xml است کد زیر را قرار دهید.

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity" >
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical" >
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="19dp"
            android:text="Programchi.ir" />
        <ImageView
            android:layout_width="50dp"
            android:layout_height="50dp"
            android:src="@drawable/ic_launcher" />
        <ListView
            android:id="@+id/listView"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent" />
    </LinearLayout>
</ScrollView>

در بالا ابتدا یک Scrollview قرار گرفته است سپس در آن اجزای مختلفی مانند TextView , ImageView و ListView قرار گرفته است.
سپس وارد اکتیویتی اصلی شده در اینجا نام آن برابر با MainActivity.java است و کدهای زیر را در آن قرار دهید.

package com.example.scrollviewlistviewdemo;
import android.os.Bundle;
import android.app.Activity;
import android.widget.ArrayAdapter;
import android.widget.ListView;
public class MainActivity extends Activity {
       private String listview_array[] = { "ONE", "TWO", "THREE", "FOUR", "FIVE",
                     "SIX", "SEVEN", "EIGHT", "NINE", "TEN" };
       ListView myList;
       @Override
       protected void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.activity_main);
              myList = (ListView) findViewById(R.id.listView);
              myList.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, listview_array));
              Helper.getListViewSize(myList);
       }
}

در آخر هم یکسری داده sample در listView لود شده ولی یه تفاوت این listView دارد ما از کلاسی که درست کردیم (Helper) استفاده کرده ایم تا scroll نیز انجام شود.
 
 
این آموزش هم به پایان رسید.
 
موفق و پیروز باشید.

مطالعه بیشتر