DrawerLayout+ListView+AutoCompleteTextView实现侧滑+提示+筛选+再次筛选数据功能

来源:互联网 发布:阿里云机顶盒 编辑:程序博客网 时间:2024/06/04 19:25

在发表前我想表达一下自己的感受吐舌头。。。。。


写这个项目一共花了我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复制如下代码

2 0
原创粉丝点击