在发表前我想表达一下自己的感受。。。。。
写这个项目一共花了我3天时间,其中前两天基本一天12小时都在写,虽然当时写的很累,不过写成后真的感觉心情很不错,呵呵呵
先来张图看下效果:
这是打开时的界面
然后点击筛选,就会弹出一个侧滑页面,输入A,当然你也可以输入B或C,如图
就会筛选出你输入的字母开头的列
最后再点击再次筛选,就会对这个页面进行再次筛选,输入1或2或3,如图
就会对这个界面进行再次筛选了,具体功能还需自己复制,然后粘贴。
自己体验过后才能明白,我就不多说了。
下面附上代码:
首先创建一个项目名为DrawerLayout的安卓APP,当然也可以自定义命名。。。
然后在主MainActivity复制如下代码
package com.example.drawerlayout;
import android.os.Bundle;
import android.support.v4.widget.DrawerLayout;
import android.text.Editable;
import android.text.TextWatcher;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.ArrayAdapter;
import android.widget.AutoCompleteTextView;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;
public class MainActivity extends Activity{
private DrawerLayout mDrawerLayout;
private Button frwhs,bt3;
private AutoCompleteTextView autoTv;
private ListView listView;
private List<Model> demos;
private List<Model> datas;
private List<Model> datas1;
private ArrayList<Integer> ary;
private String f;
private Myadapter adapter;
private ArrayAdapter<String> autoadapter;
private HashMap<Integer, String> hashMap;
boolean a=true;
String[] str={"A1","B1","C1","113","124","125"};
@SuppressLint("UseSparseArrays")
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
frwhs = (Button) findViewById(R.id.spinner1);
bt3 = (Button) findViewById(R.id.bt3);
autoTv=(AutoCompleteTextView) findViewById(R.id.auto);
listView=(ListView) findViewById(R.id.listView1);
demos=new ArrayList<Model>();
datas=new ArrayList<Model>();
datas1=new ArrayList<Model>();
ary = new ArrayList<Integer>();
hashMap = new HashMap<Integer, String>();
demos.add(new Model("A1","113","bt1","bt2"));
demos.add(new Model("A1","124","bt1","bt2"));
demos.add(new Model("B1","124","bt1","bt2"));
demos.add(new Model("C1","124","bt1","bt2"));
demos.add(new Model("A1","125","bt1","bt2"));
demos.add(new Model("B1","223","bt1","bt2"));
demos.add(new Model("B1","224","bt1","bt2"));
demos.add(new Model("B1","225","bt1","bt2"));
demos.add(new Model("B1","226","bt1","bt2"));
demos.add(new Model("B1","227","bt1","bt2"));
demos.add(new Model("B1","228","bt1","bt2"));
demos.add(new Model("C1","323","bt1","bt2"));
demos.add(new Model("C1","324","bt1","bt2"));
demos.add(new Model("C1","325","bt1","bt2"));
adapter=new Myadapter(demos);
listView.setAdapter(adapter);
autoTv.setThreshold(1);
autoadapter=new ArrayAdapter<String>(this,android.R.layout.simple_dropdown_item_1line,str);
autoTv.setAdapter(autoadapter);
autoTv.setOnItemClickListener(new OnItemClickListener() {
@SuppressLint("RtlHardcoded")
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
f = (String) autoadapter.getItem(position);
updateData();
if(f.equals("124")||f.equals("113")||f.equals("125")){
updateData1();
}
mDrawerLayout.closeDrawer(Gravity.RIGHT);
}
});
mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);//禁止触摸滑动
frwhs.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
mDrawerLayout.openDrawer(Gravity.RIGHT);
if(a){
bt3.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
mDrawerLayout.openDrawer(Gravity.RIGHT);
}
});
}
}
});
}
private class Myadapter extends BaseAdapter{
private List<Model> data;
public Myadapter(List<Model> data) {
this.data = data;
}
@Override
public int getCount() {
return data.size();
}
@Override
public Object getItem(int position) {
return data.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@SuppressLint({ "CutPasteId", "InflateParams" })
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if(convertView==null){
convertView = LayoutInflater.from(MainActivity.this).inflate(R.layout.activity_main2, null);
holder=new ViewHolder();
holder.tv=(TextView) convertView.findViewById(R.id.tv);
holder.etnumber=(EditText) convertView.findViewById(R.id.editText1);
holder.bt1=(Button) convertView.findViewById(R.id.bt1);
holder.bt2=(Button) convertView.findViewById(R.id.bt2);
holder.checkbox=(CheckBox) convertView.findViewById(R.id.checkbox);
convertView.setTag(holder);
}
Model demo = data.get(position);
holder = (ViewHolder) convertView.getTag();
EditText editText = (EditText) convertView.findViewById(R.id.editText1);
editText.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
}
@Override
public void afterTextChanged(Editable s) {
hashMap.put(position, s.toString());
}
});
final Button bt1=holder.bt1;
bt1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
mDrawerLayout.openDrawer(Gravity.RIGHT);
autoTv.setThreshold(1);
autoadapter=new ArrayAdapter<String>(MainActivity.this,android.R.layout.simple_dropdown_item_1line,str);
autoTv.setAdapter(autoadapter);
autoTv.setOnItemClickListener(new OnItemClickListener() {
@SuppressLint("RtlHardcoded")
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
bt1.setText(autoadapter.getItem(position));
mDrawerLayout.closeDrawer(Gravity.RIGHT);
}
});
}
});
final Button bt2 = holder.bt2;
bt2.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
mDrawerLayout.openDrawer(Gravity.RIGHT);
autoTv.setThreshold(1);
autoadapter=new ArrayAdapter<String>(MainActivity.this,android.R.layout.simple_dropdown_item_1line,str);
autoTv.setAdapter(autoadapter);
autoTv.setOnItemClickListener(new OnItemClickListener() {
@SuppressLint("RtlHardcoded")
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
bt2.setText(autoadapter.getItem(position));
mDrawerLayout.closeDrawer(Gravity.RIGHT);
}
});
}
});
CheckBox chechBox = (CheckBox) convertView.findViewById(R.id.checkbox);
chechBox.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
ary.add(position);
}
});
holder.tv.setText(demo.getTextview());
holder.etnumber.setText(demo.getNumber());
holder.bt1.setText(demo.getBt1());
holder.bt2.setText(demo.getBt2());
holder.checkbox.setChecked(false);
if(hashMap.get(position) != null){
editText.setText(hashMap.get(position));
}
return convertView;
}
class ViewHolder{
TextView tv;
EditText etnumber;
Button bt1;
Button bt2;
CheckBox checkbox;
}
}
private void updateData() {
if(a){
for(int i=0;i<demos.size();i++){
if(demos.get(i).getTextview().equals(f)){
datas.add(demos.get(i));
a=false;
}
}
}if(!a){
datas.clear();
for(int i=0;i<demos.size();i++){
if(demos.get(i).getTextview().equals(f)){
datas.add(demos.get(i));
a=true;
}
}
}
listView.setAdapter(new Myadapter(datas));
}
private void updateData1() {
if(a){
for(int i=0;i<datas.size();i++){
if(datas.get(i).getNumber().equals(f)){
datas1.add(datas.get(i));
a=false;
}
}
}if(!a){
datas1.clear();
for(int i=0;i<datas.size();i++){
if(datas.get(i).getNumber().equals(f)){
datas1.add(datas.get(i));
a=true;
}
}
}
listView.setAdapter(new Myadapter(datas1));
}
}
MainActivity代码写完后,还需要再创建一个名为Model的实体类,具体代码如下
package com.example.drawerlayout;
import java.io.Serializable;
public class Model implements Serializable{
/**
*
*/
private static final long serialVersionUID = 1L;
private String textview;
private String number;
private String bt1;
private String bt2;
public Model(String textview, String number, String bt1, String bt2) {
super();
this.textview = textview;
this.number = number;
this.bt1 = bt1;
this.bt2 = bt2;
}
public String getNumber() {
return number;
}
public void setNumber(String number) {
this.number = number;
}
public String getTextview() {
return textview;
}
public void setTextview(String textview) {
this.textview = textview;
}
public String getBt1() {
return bt1;
}
public void setBt1(String bt1) {
this.bt1 = bt1;
}
public String getBt2() {
return bt2;
}
public void setBt2(String bt2) {
this.bt2 = bt2;
}
}
最后是布局代码,这里用到了两个布局xml,一个主布局,还有一个用来填充ListView
主布局代码如下
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<android.support.v4.widget.DrawerLayout
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<FrameLayout
android:id="@+id/content_frame"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<!-- The navigation drawer -->
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
>
<Button
android:id="@+id/spinner1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="筛选" />
<Button
android:id="@+id/bt3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="再次筛选" />
<ListView
android:id="@+id/listView1"
android:layout_below="@+id/spinner1"
android:layout_width="wrap_content"
android:layout_height="match_parent" >
</ListView>
</LinearLayout>
</FrameLayout>
<!-- The navigation drawer -->
<LinearLayout
android:layout_width="200dp"
android:layout_height="match_parent"
android:layout_gravity="end"
android:background="#ffffff" >
<AutoCompleteTextView
android:id="@+id/auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="请输入文字进行搜索" >
</AutoCompleteTextView>
</LinearLayout>
</android.support.v4.widget.DrawerLayout>
</RelativeLayout>
然后再复制创建一个名为activity_main2.xml的布局文件,代码如下
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<android.support.v4.widget.DrawerLayout
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<FrameLayout
android:id="@+id/content_frame"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<!-- The navigation drawer -->
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
>
<Button
android:id="@+id/spinner1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="筛选" />
<Button
android:id="@+id/bt3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="再次筛选" />
<ListView
android:id="@+id/listView1"
android:layout_below="@+id/spinner1"
android:layout_width="wrap_content"
android:layout_height="match_parent" >
</ListView>
</LinearLayout>
</FrameLayout>
<!-- The navigation drawer -->
<LinearLayout
android:layout_width="200dp"
android:layout_height="match_parent"
android:layout_gravity="end"
android:background="#ffffff" >
<AutoCompleteTextView
android:id="@+id/auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="请输入文字进行搜索" >
</AutoCompleteTextView>
</LinearLayout>
</android.support.v4.widget.DrawerLayout>
</RelativeLayout>
首先创建一个项目名为DrawerLayout的安卓APP,当然也可以自定义命名。。。
然后在主MainActivity复制如下代码