ListView后面动态追加加载更多按钮

1.引入:

最近在做一个项目,有些使用需要在ListView后面追加加载更多按钮,有些时候不需要显示。第一反应是什么使用FootView啊,ListView.addFootView多么简单啊,问题出现了,在不需要的时候,即使将footView.setVisibility(GONE);footView依然占用着空间,不过显示空白罢了。既然给ListView添加footView,动态的控制FootView的可见性,这条路行不通,是不是可以使用别的方法呢?我就想到了给ListView设置多种布局,对最后的条目进行动态控制;

2.罗列一下代码:

activity_main2.xml文件

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/ll_total"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical" >
    <TextView
        android:id="@+id/tv"
        android:layout_width="match_parent"
        android:layout_height="100dp"
        android:background="#000"
        android:text="展示/隐藏加载更多按钮"
        android:textSize="36sp" >
    </TextView>
    <ListView
        android:id="@+id/lv"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/tv" >
    </ListView>
</RelativeLayout>

MainActivity

package com.example.androidtest;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ListView;
import android.widget.TextView;

public class MainActivity extends Activity implements OnClickListener {
    ListView mListView;
    TextViewAdapter mAdapter;
    TextView showOrHideFootView;
    boolean shownFootView = false;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);
        mListView = (ListView) findViewById(R.id.lv);
        mAdapter = new TextViewAdapter(this);
        mListView.setAdapter(mAdapter);
        showOrHideFootView = (TextView) findViewById(R.id.tv);
        showOrHideFootView.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        shownFootView = !shownFootView;
        mAdapter.setShowFootView(shownFootView);
    }

}

TextViewAdapter

package com.example.androidtest;

import android.content.Context;
import android.graphics.Color;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.widget.AbsListView;
import android.widget.BaseAdapter;
import android.widget.TextView;

public class TextViewAdapter extends BaseAdapter {
    Context mContext;
    private int showNum = 6;
    private boolean showFootView = false;

    public TextViewAdapter(Context context) {
        mContext = context;
    }

    ***public void setShowFootView(boolean showOrHideFootView) {
        showFootView = showOrHideFootView;
        notifyDataSetChanged();
    }***

    ***// 如果展示footView count+1;
    @Override
    public int getCount() {
        int shownItem = showNum;
        if (showFootView) {
            shownItem++;
        }
        return shownItem;
    }***

    @Override
    public String getItem(int position) {
        return position + "";
    }

    @Override
    public int getItemViewType(int position) {
        int viewType = 0;
        ***if ((position == getCount() - 1) && showFootView) {
            viewType = 1;
        }***
        return viewType;
    }

    @Override
    public int getViewTypeCount() {
        return 2;
    }

    @Override
    public long getItemId(int position) {
        return 0;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder viewHolder = null;
        if (convertView == null) {
            switch (getItemViewType(position)) {
            case 0: {
                viewHolder = new ViewHolder();
                TextView outerLayout = new TextView(mContext);
                outerLayout.setGravity(Gravity.CENTER);
                outerLayout.setTextSize(50);
                outerLayout.setTextColor(Color.BLUE);
                AbsListView.LayoutParams outerParams = new AbsListView.LayoutParams(
                        new LayoutParams(AbsListView.LayoutParams.MATCH_PARENT,
                                300));
                outerLayout.setLayoutParams(outerParams);
                viewHolder.itemLayout = outerLayout;
                convertView = outerLayout;
                convertView.setTag(viewHolder);
            }

                break;

            case 1: {
                viewHolder = new ViewHolder();
                TextView outerLayout = new TextView(mContext);
                outerLayout.setGravity(Gravity.CENTER);
                outerLayout.setTextSize(50);
                outerLayout.setTextColor(Color.BLUE);
                AbsListView.LayoutParams outerParams = new AbsListView.LayoutParams(
                        new LayoutParams(AbsListView.LayoutParams.MATCH_PARENT,
                                300));
                outerLayout.setLayoutParams(outerParams);
                viewHolder.itemLayout = outerLayout;
                convertView = outerLayout;
                outerLayout.setText("load More...");
                convertView.setTag(viewHolder);
            }
                break;
            default:
                break;
            }

        } else {
            viewHolder = (ViewHolder) convertView.getTag();
        }
        switch (getItemViewType(position)) {
        case 0: {
            viewHolder.itemLayout.setText(getItem(position));
            System.err.println("-------position--" + position);
        }
            break;

        case 1:

            break;
        default:
            break;
        }

        return convertView;
    }

    class ViewHolder {
        TextView itemLayout;

    }

}

3.总结:

条条大路通罗马,转换一种思路,或许就是柳暗花明。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值