Android:列表视图和滚动视图兼容性

时间:2015-07-24 16:41:01

标签: android listview android-listview scrollview android-scrollview

关于我的申请的快速说明。这是一款应用程序,它使用API​​来获取有关特定联盟(LoL)游戏的特定玩家的服务器请求

我最近将我的代码从10个预先设置的最近匹配的静态布局更改为ListView,以便在玩家没有10个最近的匹配时避免使用cludder。

我对此ListView的问题是,在创建它时,您无法在其中向上和向下滚动。也就是说它是在非常小的高度创建的,当你滚动它时,页面不会滚动,ListView本身会滚动。这是不可取的。我宁愿让用户滚动整个屏幕,而不仅仅是ListView的一小部分。

我构建了我的xml文件,如下所示:

<LinearLayout 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"
android:orientation="vertical"
tools:context=".MainActivity">

<ScrollView
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="12dp"
        android:orientation="vertical">

        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal"
            android:orientation="horizontal"
            android:paddingLeft="@dimen/activity_horizontal_margin">


            <EditText
                android:id="@+id/summoner_name"
                android:layout_width="210dp"
                android:layout_height="wrap_content"
                android:hint="Summoner Name"
                android:imeOptions="actionSend"
                android:lines="1" />

            <Spinner
                android:id="@+id/regions"
                android:layout_width="60dp"
                android:layout_height="wrap_content" />


            <Button
                android:id="@+id/search_button"
                android:layout_width="45dp"
                android:layout_height="45dp"
                android:background="@drawable/searchbuttononclick" />
        </LinearLayout>


        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal"
            android:layout_marginTop="9dp"
            android:orientation="horizontal"
            android:paddingLeft="@dimen/activity_horizontal_margin">

            <ImageView
                android:id="@+id/leagueicon"
                android:layout_width="160dp"
                android:layout_height="150dp" />

            <LinearLayout
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_gravity="center_horizontal"
                android:orientation="vertical">

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="20dp" />


                <TextView
                    android:id="@+id/summoner_name_after_search"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center_horizontal"
                    android:textSize="22dp"
                    android:textStyle="bold" />

                <LinearLayout
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center_horizontal"
                    android:orientation="horizontal">

                    <TextView
                        android:id="@+id/league_tier"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:textColor="#ff0060a8"
                        android:textSize="18dp" />

                    <TextView
                        android:id="@+id/league_points"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_marginLeft="5dp"
                        android:textSize="18dp" />

                </LinearLayout>

                <LinearLayout
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center_horizontal"
                    android:orientation="horizontal">

                    <TextView
                        android:id="@+id/ranked_wins"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:textColor="#ff00b515"
                        android:textSize="18dp" />

                    <TextView
                        android:id="@+id/slash_between_wins_and_losses"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_marginLeft="5dp"
                        android:textColor="#ff817a81"
                        android:textSize="18dp" />

                    <TextView
                        android:id="@+id/ranked_losses"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_marginLeft="5dp"

                        android:textColor="#ffb5000f"
                        android:textSize="18dp" />


                </LinearLayout>

                <TextView
                    android:id="@+id/what_were_you_last_season"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center_horizontal"

                    android:textColor="#ff817a81"
                    android:textSize="18dp" />
            </LinearLayout>


        </LinearLayout>

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal"
            android:gravity="center_horizontal"
            android:textSize="16dp"
            android:id="@+id/normal_title"
            android:textStyle="bold"
            android:textColor="#ff000000" />

        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="120dp"
            android:orientation="horizontal"
            android:baselineAligned="false">

            <LinearLayout
                android:layout_width="0dp"
                android:layout_height="120dp"
                android:layout_weight="1"
                android:orientation="vertical">

                <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="120dp"
                    android:orientation="horizontal">

                    <LinearLayout
                        android:layout_width="0dp"
                        android:layout_weight="1"
                        android:layout_height="120dp"
                        android:orientation="vertical">

                        <TextView
                            android:layout_width="match_parent"
                            android:layout_height="38dp"
                            android:paddingLeft="5dp"
                            android:id="@+id/normal_wins"
                            android:gravity="center_vertical"
                            android:textSize="16dp"
                            />
                        <TextView
                            android:layout_width="match_parent"
                            android:layout_height="2dp"
                            android:id="@+id/normal_space_one"/>

                        <TextView
                            android:layout_width="match_parent"
                            android:gravity="center_vertical"
                            android:paddingLeft="5dp"
                            android:textSize="16dp"
                            android:id="@+id/normal_kills"
                            android:layout_height="38dp"
                            />
                        <TextView
                            android:layout_width="match_parent"
                            android:id="@+id/normal_space_two"
                            android:layout_height="2dp"/>

                        <TextView
                            android:layout_width="match_parent"
                            android:gravity="center_vertical"
                            android:paddingLeft="5dp"
                            android:id="@+id/normal_assists"
                            android:textSize="16dp"
                            android:layout_height="38dp"
                            />

                    </LinearLayout>

                    <LinearLayout
                        android:layout_width="0dp"
                        android:layout_weight="1"
                        android:layout_height="120dp"
                        android:orientation="vertical">

                        <TextView
                            android:layout_width="match_parent"
                            android:layout_height="38dp"
                            android:gravity="center_vertical"
                            android:id="@+id/normal_wins_value"
                            android:paddingLeft="5dp"
                            android:textSize="16dp"
                            />
                        <TextView
                            android:layout_width="match_parent"
                            android:id="@+id/normal_space_three"
                            android:layout_height="2dp"/>

                        <TextView
                            android:layout_width="match_parent"
                            android:gravity="center_vertical"
                            android:id="@+id/normal_kills_value"
                            android:textSize="16dp"
                            android:paddingLeft="5dp"
                            android:layout_height="38dp"
                            />
                        <TextView
                            android:layout_width="match_parent"
                            android:layout_height="2dp"
                            android:id="@+id/normal_space_four"/>

                        <TextView
                            android:layout_width="match_parent"
                            android:id="@+id/normal_assists_value"
                            android:gravity="center_vertical"
                            android:paddingLeft="5dp"
                            android:textSize="16dp"
                            android:layout_height="38dp"
                            />

                    </LinearLayout>
                </LinearLayout>


            </LinearLayout>

            <LinearLayout
                android:layout_width="0dp"
                android:layout_height="120dp"
                android:orientation="vertical"
                android:layout_weight="1">

                <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="120dp"
                    android:orientation="horizontal"
                    android:baselineAligned="false">

                    <LinearLayout
                        android:layout_width="0dp"
                        android:layout_weight="1"
                        android:layout_height="120dp"
                        android:orientation="vertical">

                        <TextView
                            android:layout_width="match_parent"
                            android:layout_height="38dp"
                            android:paddingLeft="5dp"
                            android:id="@+id/normal_minion_kills"
                            android:gravity="center_vertical"
                            android:textSize="16dp"
                            />
                        <TextView
                            android:layout_width="match_parent"
                            android:layout_height="2dp"
                            android:id="@+id/normal_space_five"/>

                        <TextView
                            android:layout_width="match_parent"
                            android:gravity="center_vertical"
                            android:paddingLeft="5dp"
                            android:textSize="14dp"
                            android:id="@+id/normal_neutral_minion_kills"
                            android:layout_height="38dp"
                            android:layout_gravity="center_horizontal"/>
                        <TextView
                            android:layout_width="match_parent"
                            android:id="@+id/normal_space_six"
                            android:layout_height="2dp"/>

                        <TextView
                            android:layout_width="match_parent"
                            android:gravity="center_vertical"
                            android:paddingLeft="5dp"
                            android:id="@+id/normal_turrets_destroyed"
                            android:textSize="12dp"
                            android:layout_height="38dp"
                            />

                    </LinearLayout>

                    <LinearLayout
                        android:layout_width="0dp"
                        android:layout_weight="1"
                        android:layout_height="120dp"
                        android:orientation="vertical">

                        <TextView
                            android:layout_width="match_parent"
                            android:layout_height="38dp"
                            android:paddingLeft="5dp"
                            android:gravity="center_vertical"
                            android:id="@+id/normal_minion_kills_value"
                            android:textSize="16dp"
                            />
                        <TextView
                            android:layout_width="match_parent"
                            android:id="@+id/normal_space_seven"
                            android:layout_height="2dp"/>

                        <TextView
                            android:layout_width="match_parent"
                            android:gravity="center_vertical"
                            android:paddingLeft="5dp"
                            android:id="@+id/neutral_minion_kills_value"
                            android:textSize="16dp"
                            android:layout_height="38dp"
                            />
                        <TextView
                            android:layout_width="match_parent"
                            android:layout_height="2dp"
                            android:id="@+id/normal_space_eight"/>

                        <TextView
                            android:layout_width="match_parent"
                            android:id="@+id/normal_turrets_destroyed_value"
                            android:gravity="center_vertical"
                            android:paddingLeft="5dp"
                            android:textSize="16dp"
                            android:layout_height="38dp"
                            />

                    </LinearLayout>
                </LinearLayout>

           </LinearLayout>


        </LinearLayout>

        <com.ryanfolz.riotgamesapi.SwagObListView
            android:id="@+id/list"
            android:layout_width="wrap_content"
            android:layout_height="fill_parent" />

        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="20dp"></LinearLayout>

    </LinearLayout>
</ScrollView>
</LinearLayout>

如您所见,我创建了一个名为“SwagObListView”的自定义ListView

以下是代码:

public class SwagObListView extends ListView implements AdapterView.OnItemClickListener {

private List<SwagOb> swagList;
private SwagObClickListener swagClicked;

public SwagObListView(Context context) {
    super(context);
}

public SwagObListView(Context context, AttributeSet attrs) {
    super(context, attrs);
    this.swagList = swagList;
    this.swagClicked = swagClicked;
}

@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
    if (swagClicked != null) {
        swagClicked.onConnectionClicked(swagList.get(i));
    }
}

public void setOnSwagObClickListener(SwagObClickListener c){
    this.swagClicked = c;
}

public void setSwag(List<SwagOb> swagList) {
    this.swagList = swagList;
    SwagObAdapter swagDapter = new SwagObAdapter(getContext(), swagList);
    setAdapter(swagDapter);
    setOnItemClickListener(this);
}

}

对于SwagOb类,以下是代码:

公共类SwagOb {

private String gameType;
private Drawable championPicturePlayed;
private String kills;
private String deaths;
private Drawable[] summonerSpells;
private String assists;
private String cs;
private String gold;
private boolean won;
private Drawable itemOne, itemTwo, itemThree, itemFour, itemFive, itemSix;
private Drawable[] tempDrawable;
private Drawable[] tempDrawable2;
private String[] tempString;
private SearchPlayerFragment activty;
private CollectUserData data;

public SwagOb(String gameType, Drawable championPicturePlayed, String kills, String deaths, Drawable[] summonerSpells,
              String assists, String cs, String gold, boolean won, Drawable itemOne, Drawable itemTwo, Drawable itemThree, Drawable itemFour,
              Drawable itemFive, Drawable itemSix, Drawable[] tempDrawable, Drawable[] tempDrawable2, String[] tempString, SearchPlayerFragment activity, CollectUserData data){
    this.gameType = gameType;
    this.championPicturePlayed = championPicturePlayed;
    this.kills = kills;
    this.deaths = deaths;
    this.summonerSpells = summonerSpells;
    this.itemFive = itemFive;
    this.itemTwo = itemTwo;
    this.itemOne = itemOne;
    this.itemThree = itemThree;
    this.itemFour = itemFour;
    this.itemSix = itemSix;
    this.assists = assists;
    this.cs = cs;
    this.gold = gold;
    this.won = won;
    this.tempDrawable = tempDrawable;
    this.tempDrawable2 = tempDrawable2;
    this.tempString = tempString;
    this.activty = activity;
    this.data = data;
}

(这也有吸气剂和固定剂,但这并不重要。)

任何人都知道为什么会这样做?

2 个答案:

答案 0 :(得分:1)

Android不允许在ScrollView中添加ListView。可能的解决方法是删除scrollview并将顶级内容添加到listivew标题和底部内容到listview页脚。

答案 1 :(得分:0)

在你的滚动视图中添加这个属性

android:fillViewport="true"