实现可滑动,能在外部动态控制ListView显示个数的Android项目
来源:互联网 发布:mac版wifi共享软件 编辑:程序博客网 时间:2024/06/05 10:22
步骤:
这里是用一个RelativeLayout实现ListView的一个title,在title中有一个Image通过点击这个image,来控制ListView的显示个数。
第一步:
新建两个类分别继承RelativeLayout和ListView(title的layout我就不写了,只要是开发的都会写)
public class SettingListView extends ListView { public SettingListView(Context context) { super(context); } public SettingListView(Context context, AttributeSet attrs) { super(context, attrs); } public SettingListView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } /** * @param widthMeasureSpec horizontal space requirements as imposed by the parent. * The requirements are encoded with * {@link MeasureSpec}. * @param heightMeasureSpec vertical space requirements as imposed by the parent. * The requirements are encoded with * {@link MeasureSpec}. */ @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST); super.onMeasure(widthMeasureSpec, expandSpec); }}
onMeasure()函数是为了让ListView能够适应ScrollView,不然只能显示一行。
public class TitleSetting extends RelativeLayout { protected LayoutInflater layoutInflater; private ImageView title_pack_up; protected TextView listview_title_text_dire, title_text_show; private boolean showListViewAll = true; private SettingAdapter mSettingAdapter;//持有外部类声明 public TitleSetting(Context context) { super(context); initView(context); } public TitleSetting(Context context, AttributeSet attrs) { super(context, attrs); initView(context); } public TitleSetting(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); initView(context); } private void initView(Context context) { mSettingAdapter=new SettingAdapter(context); layoutInflater = LayoutInflater.from(context); layoutInflater.inflate(R.layout.apus_listview_title_setting, this); listview_title_text_dire = (TextView) findViewById(R.id.listview_title_text_dire); title_text_show = (TextView) findViewById(R.id.title_text_show); title_pack_up = (ImageView) findViewById(R.id.title_pack_up); title_pack_up.setBackgroundResource(R.drawable.down); title_pack_up.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if (showListViewAll) { //show all listview(add item) mSettingAdapter.addData(); title_pack_up.setBackgroundResource(R.drawable.up); Log.i("TitleSetting","图片替换完毕"); showListViewAll=false; } else { //show part(delete item) mSettingAdapter.deleteData();//回调 title_pack_up.setBackgroundResource(R.drawable.down); showListViewAll=true; } } }); }}
第二步:建立布局文件
<?xml version="1.0" encoding="utf-8"?><ScrollView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/screen_contain" android:layout_width="wrap_content" android:layout_height="wrap_content" android:scrollbars="none"> <!--all View--> <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="match_parent" android:background="@color/background" android:orientation="vertical" android:paddingLeft="@dimen/screen_left" android:paddingRight="@dimen/screen_right" tools:context="com.zcl.myapp.MainActivity"> <!-- show setting--> <com.zcl.myapp.allAdapter.TitleSetting android:id="@+id/listview_title_setting" android:layout_width="match_parent" android:layout_height="40dp" android:visibility="visible" /> <com.zcl.myapp.allAdapter.SettingListView android:id="@+id/listView_settings" android:layout_width="match_parent" android:layout_height="wrap_content" android:divider="@drawable/apus_divider_list" android:dividerHeight="12dp" android:visibility="visible"/> </LinearLayout></ScrollView>
第三步:编写ListView对应的Adapter
import android.content.Context;import android.content.res.Resources;import android.util.Log;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.AbsListView;import android.widget.BaseAdapter;import android.widget.ImageView;import android.widget.TextView;import com.apus.searchdesign.R;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;/** * Created by zcl */public class SettingAdapter extends BaseAdapter { private LayoutInflater mInflater; private List<Map<String, Object>> mData; protected Resources res; protected static List<Map<String, Object>> list; private static class SettingViewHolder { private ImageView settings_img; private TextView settings_text_middle, settings_text_right; } public SettingAdapter(Context context) { mInflater = LayoutInflater.from(context); res = context.getResources(); mData = getData(); //刷新ListView notifyDataSetChanged(); } @Override public View getView(int position, View convertView, ViewGroup viewGroup) { SettingViewHolder holder = null; if (convertView == null) { holder = new SettingViewHolder(); convertView = mInflater.inflate(R.layout.listitem_settings, null); //设置item的宽和高度,120是执行了dp到px计算之后的数字,1dp=2px convertView.setLayoutParams(new AbsListView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 120)); holder.settings_img = (ImageView) convertView.findViewById(R.id.settings_img); holder.settings_text_middle = (TextView) convertView.findViewById(R.id.settings_text_middle); holder.settings_text_right = (TextView) convertView.findViewById(R.id.settings_text_right); convertView.setTag(holder); } else { holder = (SettingViewHolder) convertView.getTag(); } holder.settings_img.setBackgroundResource((Integer) mData.get(position).get("settings_img")); holder.settings_text_middle.setText((String) mData.get(position).get("settings_text_middle")); holder.settings_text_right.setText((String) mData.get(position).get("settings_text_right")); return convertView; } @Override public int getCount() { return mData.size(); } @Override public Object getItem(int position) { return null; } @Override public long getItemId(int position) { return 0; } private List<Map<String, Object>> getData() { list = new ArrayList<Map<String, Object>>(); Map<String, Object> map = new HashMap<String, Object>(); map.put("settings_img", R.drawable.setting); map.put("settings_text_middle", res.getStringArray(R.array.settings_text_middle)[0]); map.put("settings_text_right", res.getStringArray(R.array.settings_text_right)[0]); list.add(map); Map<String, Object> map1 = new HashMap<String, Object>(); map1.put("settings_img", R.drawable.setting); map1.put("settings_text_middle", res.getStringArray(R.array.settings_text_middle)[1]); map1.put("settings_text_right", res.getStringArray(R.array.settings_text_right)[1]); list.add(map1); Map<String, Object> map2 = new HashMap<String, Object>(); map2.put("settings_img", R.drawable.setting); map2.put("settings_text_middle", res.getStringArray(R.array.settings_text_middle)[2]); map2.put("settings_text_right", res.getStringArray(R.array.settings_text_right)[2]); list.add(map2); return list; } protected void addData() { Log.i("Setting", "增加之前" + list.size()); //待增加数据 Map<String, Object> map3 = new HashMap<String, Object>(); map3.put("settings_img", R.drawable.setting); map3.put("settings_text_middle", res.getStringArray(R.array.settings_text_middle)[3]); map3.put("settings_text_right", res.getStringArray(R.array.settings_text_right)[3]); list.add(map3); Map<String, Object> map4 = new HashMap<String, Object>(); map4.put("settings_img", R.drawable.setting); map4.put("settings_text_middle", res.getStringArray(R.array.settings_text_middle)[4]); map4.put("settings_text_right", res.getStringArray(R.array.settings_text_right)[4]); list.add(map4); Map<String, Object> map5 = new HashMap<String, Object>(); map5.put("settings_img", R.drawable.setting); map5.put("settings_text_middle", res.getStringArray(R.array.settings_text_middle)[5]); map5.put("settings_text_right", res.getStringArray(R.array.settings_text_right)[5]); list.add(map5); Log.i("Setting", "增加之后" + list.size()); } protected void deleteData() { Log.i("Setting", "删除之前" + list.size()); //从末尾往前删除,所以如果倒过来的话长度肯定是不会到6的,也即是5这一行会出错 list.remove(5); list.remove(4); list.remove(3); Log.i("Setting", "删除之后" + list.size()); }}
第四步:在MainActivity中实现绑定
//listView_settings listView_settings = (ListView) findViewById(R.id.listView_settings); SettingAdapter settingAdapter = new SettingAdapter(this); listView_settings.setAdapter(settingAdapter);
阅读全文
0 0
- 实现可滑动,能在外部动态控制ListView显示个数的Android项目
- ListView滑动删除实现之三——创建可滑动删除的ListView
- 【Android界面实现】解决ScrollView中嵌套Listview,Listview中嵌套Listview显示不完整和滑动冲突的问题
- 【Android界面实现】解决ScrollView中嵌套Listview,Listview中嵌套Listview显示不完整和滑动冲突的问题
- 【Android界面实现】解决ScrollView中嵌套Listview,Listview中嵌套Listview显示不完整和滑动冲突的问题
- 【Android界面实现】解决ScrollView中嵌套Listview,Listview中嵌套Listview显示不完整和滑动冲突的问题
- Android-->实现可滑动删除的Layout
- Android可左右滑动的ListView开源框架SwipeMenuListView
- scroolView嵌套listview时listView只显示一条item的高,并且还能滑动问题
- android 一个页面内 多个listview的实现滑动显示
- android 关于在ListView 显示和隐藏checkboxes的实现。
- 滑动显示首字母的ListView
- 在可滑动列表(ListView & RecyclerView)中实现视频播放
- Android Listview 平顺滑动实现
- Android ListView实现滑动删除
- textview在内容过多时可上下滑动的实现
- Android项目实战:自定义不可滑动的ListView和GridView
- 在ListView上滑动显示Delete按钮
- [NOIP提高组2003]传染病防治
- 算法训练 反置数
- Mysql常用api
- Hololens语音识别之holotoolkit1.5.7
- CentOS入门
- 实现可滑动,能在外部动态控制ListView显示个数的Android项目
- Xcode使用教程详细讲解(下)
- SpringBoot启动遇到的异常问题
- 初学者---简介java中的对象和类(3)
- Jsp中遇到“Duplicate local vatiable basePath”和“Duplicate local vatiable path” Errors
- 背包入门--01背包
- gSoap工具wsdl2h及soapcpp2指令汇总
- chown修改指定文件的拥有者,用户或组
- python 安装scipy 报错:Microsoft Visual C++ 14.0 is required