Android 小生功能贴<一> --- 输入应用名动态添加应用,长按可删除_移动开发_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > 移动开发 > Android 小生功能贴<一> --- 输入应用名动态添加应用,长按可删除

Android 小生功能贴<一> --- 输入应用名动态添加应用,长按可删除

 2014/11/13 15:45:54  冬瓜小生  程序员俱乐部  我要评论(1)
  • 摘要:动态添加应用具有长按删除功能功能如下图:(图片显示功能不是你要的,那就默默关闭页面吧)设计思路:页面一:用girdview网格显示图标,在自定义的adapter中为每一个子Item添加内容并且加上点击事件(长按和短按),“+”button跳转到第二个页面。页面二:用AutoCompeleteTextView带提示的输入框,用adapter为其添加提示字符串组,确认显示所搜索到的应用,这里显示搜索到的应用我不是用ListView,而是在代码中动态添加布局
  • 标签:android 功能 应用

动态添加应用 具有长按删除功能 功能如下图:

              

(图片显示功能不是你要的,那就默默关闭页面吧)

设计思路:

  页面一:用girdview网格显示图标,在自定义的adapter中为每一个子Item添加内容并且加上点击事件(长按和短按),“+”button跳转到第二个页面。

  页面二:用AutoCompeleteTextView带提示的输入框,用adapter为其添加提示字符串组,确认显示所搜索到的应用,这里显示搜索到的应用我不是用ListView,而是在代码中动态添加布局,每一次按“搜索”前先清空里面的子布局。按”添加“后判断该应用是否已经添加,没有的话就在页面一加上,并且返回页面一。

  注意:数据我是用常量类Constant,没有介入SQL,只为测试方便。判断当前是否是长按状态下我用Constant.press进行标记。

下面贴上代码童鞋们一起玩玩。

  

  1 package com.example.practice1;
  2 
  3 import java.util.ArrayList;
  4 import java.util.HashMap;
  5 import java.util.Timer;
  6 
  7 import android.app.Activity;
  8 import android.app.ActionBar;
  9 import android.app.Fragment;
 10 import android.content.Context;
 11 import android.content.Intent;
 12 import android.os.Bundle;
 13 import android.os.SystemClock;
 14 import android.util.Log;
 15 import android.view.LayoutInflater;
 16 import android.view.Menu;
 17 import android.view.MenuItem;
 18 import android.view.MotionEvent;
 19 import android.view.View;
 20 import android.view.View.OnClickListener;
 21 import android.view.View.OnLongClickListener;
 22 import android.view.View.OnTouchListener;
 23 import android.view.ViewGroup;
 24 import android.widget.AdapterView;
 25 import android.widget.AdapterView.OnItemClickListener;
 26 import android.widget.BaseAdapter;
 27 import android.widget.Chronometer;
 28 import android.widget.GridView;
 29 import android.widget.ImageView;
 30 import android.widget.SimpleAdapter;
 31 import android.widget.TextView;
 32 import android.widget.Toast;
 33 import android.os.Build;
 34 
 35 public class MainActivity extends Activity {
 36     
 37     Grid_Adapter adp;
 38     GridView gridview;
 39     long startMili=0;
 40     long endMili=0;
 41     @Override
 42     protected void onCreate(Bundle savedInstanceState) {
 43         super.onCreate(savedInstanceState);
 44         setContentView(R.layout.main);
 45         gridview = (GridView) findViewById(R.id.gridview);  
 46         adp=new Grid_Adapter(this,Constant.num);
 47           //添加并且显示  
 48         gridview.setAdapter(adp);  
 49           
 50         }
 51     
 52 
 53         @Override
 54         public void onBackPressed() {                        //长按后 不想删除 按返回键的触发事件
 55             if(!Constant.press)
 56             finish();
 57             else {
 58                 String st;
 59                 
 60                 for(int k=12;k<Constant.num-1;k++){st=Constant.text[k];
 61                 if(st.equals("微信")){Constant.image[k]=R.drawable.weixin_press;}
 62                 if(st.equals("微博")){Constant.image[k]=R.drawable.weibo_press;}
 63                 if(st.equals("酷狗音乐")){Constant.image[k]=R.drawable.kugou_press;}
 64                 if(st.equals("华农宝")){Constant.image[k]=R.drawable.huanongbao_press;}
 65                 if(st.equals("QQ")){Constant.image[k]=R.drawable.qq_press;}
 66                 if(st.equals("飞信")){Constant.image[k]=R.drawable.feixin_press;}
 67                 }
 68                 Constant.press=false;
 69                 Constant.num++;
 70                 Constant.image[Constant.num-1]=R.drawable.image13;
 71                 Constant.text[Constant.num-1]="13";
 72                 for(int i=0;i<Constant.num;i++){
 73                     Log.v("num",Constant.text[i]);
 74                 }
 75                 adp.notifyDataSetInvalidated();//更新
 76             }
 77         }
 78         
 79         private class appClick implements OnTouchListener{    //子Item的OnTouch触发事件
 80             int position;
 81             public appClick(int position) {
 82                 // TODO Auto-generated constructor stub
 83                 this.position=position;
 84             }
 85 
 86             @Override
 87             public boolean onTouch(View arg0, MotionEvent event) {
 88                 // TODO Auto-generated method stub
 89                 
 90                 if(event.getAction() == MotionEvent.ACTION_UP){  
 91                     Log.v("s","抬起");
 92                     
 93                     endMili=System.currentTimeMillis();// 当前时间对应的毫秒数
 94                     
 95                     long Time = endMili-startMili;      //时间差
 96                     Log.v("time",Long.toString(Time));
 97                     
 98                 if(Time>1000){                            //根据时间差来判断是短按还是长按,这里标准时一秒
 99                     Log.v("long","long_out");appLongClick(position);}
100                 else {
101                     Log.v("short","short_out");appShortClick(position);}
102                 }  
103                 
104                 
105                 
106                 if(event.getAction() == MotionEvent.ACTION_DOWN){  
107                     startMili=System.currentTimeMillis();// 当前时间对应的毫秒数
108                     Log.v("q","按下"); 
109                 } 
110                 return true;
111             }
112             
113         }
114     
115           private void appShortClick(int p){                    //短按处理
116               int position=p;
117             Log.v("short","short_in");
118                 if(Constant.press){
119                     Log.v("ee","eee");
120                     for(int k=position;k<Constant.num-1;k++){
121                         Constant.image[k]=Constant.image[k+1];
122                         Constant.text[k]=Constant.text[k+1];
123                     }
124                     Log.v("shit",Constant.text[Constant.num-1]);
125                     Constant.press=true;
126                     Constant.image[Constant.num-1]=R.drawable.image13;
127                     Constant.text[Constant.num-1]="13";
128                     if(Constant.num!=13)
129                     {Constant.num--;}else {Constant.press=false;}
130                     Log.v("d",Integer.toString(Constant.num));
131                     adp.notifyDataSetInvalidated();
132                     //更新
133                 }else if(!Constant.press&&p==Constant.num-1){
134                     Intent intent =new Intent();
135                         intent.setClass(MainActivity.this, AddApplication.class);
136                         startActivity(intent);
137                         finish();
138                 }
139             
140               
141               
142           }
143         private void  appLongClick(int p){                  //长按处理
144                                
145                     if(!Constant.press&&p==Constant.num-1){}
146                     else{
147                         String st;      
148                     for(int k=12;k<Constant.num-1;k++){st=Constant.text[k];
149                     if(st.equals("微信")){Constant.image[k]=R.drawable.weixin_press;}
150                     if(st.equals("微博")){Constant.image[k]=R.drawable.weibo_press;}
151                     if(st.equals("酷狗音乐")){Constant.image[k]=R.drawable.kugou_press;}
152                     if(st.equals("华农宝")){Constant.image[k]=R.drawable.huanongbao_press;}
153                     if(st.equals("QQ")){Constant.image[k]=R.drawable.qq_press;}
154                     if(st.equals("飞信")){Constant.image[k]=R.drawable.feixin_press;}
155                     }
156                     
157                     Constant.press=true;
158                     Constant.num--;
159                     adp.notifyDataSetInvalidated();//更新
160                     }
161         }  
162 
163         class Grid_Adapter extends BaseAdapter{                //GridView的自定义adapter
164             Context mContext; 
165             public Grid_Adapter(Context context,int num){
166                 mContext=context;
167                 
168             }
169             @Override
170             public int getCount() {
171                 // TODO Auto-generated method stub
172                 return Constant.num;
173             }
174 
175             @Override
176             public Object getItem(int arg0) {
177                 // TODO Auto-generated method stub
178                 return Constant.image[arg0];
179             }
180 
181             @Override
182             public long getItemId(int arg0) {
183                 // TODO Auto-generated method stub
184                 return arg0;
185             }
186 
187             @Override
188             public View getView(int position, View arg1, ViewGroup arg2) {
189                 // TODO Auto-generated method stub
190                 
191                 LayoutInflater inflater = LayoutInflater.from(mContext); 
192                 View view = null;
193                 view = inflater.inflate(R.layout.grid_adapter, null);
194                 ImageView im=(ImageView)view.findViewById(R.id.ItemImage);
195                 
196                 TextView te=(TextView)view.findViewById(R.id.ItemText);
197                 
198                 im.setBackgroundResource((int)getItem(position));
199                 te.setText(Constant.text[position]);
200                
201                 if(position>11&&position<=Constant.num-1){
202                     
203                     view.setOnTouchListener(new appClick(position)); 
204                     
205                 }
206                     
207                 
208                 
209                 return view;
210             
211             }}
212 }
213 
214     

MainActivity的XML布局文件就一个GiewView,这里就不贴了。

  1 package com.example.practice1;
  2 
  3 import android.app.Activity;
  4 import android.content.Intent;
  5 import android.os.Bundle;
  6 import android.text.Editable;
  7 import android.view.LayoutInflater;
  8 import android.view.View;
  9 import android.widget.ArrayAdapter;
 10 import android.widget.AutoCompleteTextView;
 11 import android.widget.Button;
 12 import android.widget.ImageView;
 13 import android.widget.LinearLayout;
 14 import android.widget.TextView;
 15 import android.widget.Toast;
 16 
 17 public class AddApplication extends Activity{
 18 AutoCompleteTextView autotext;
 19 Button bu_se;
 20 LinearLayout app_add;
 21     @Override
 22     protected void onCreate(Bundle savedInstanceState) {
 23         // TODO Auto-generated method stub
 24         super.onCreate(savedInstanceState);
 25         setContentView(R.layout.addapplication);
 26         autotext=(AutoCompleteTextView)findViewById(R.id.autotext);
 27         ArrayAdapter<String> adapter=new ArrayAdapter<String>(
 28                 this,android.R.layout.simple_dropdown_item_1line,Constant.application);
 29         autotext.setAdapter(adapter);
 30         
 31         bu_se=(Button)findViewById(R.id.bu_search);
 32         bu_se.setOnClickListener(new View.OnClickListener() {        //搜索按钮的触发事件
 33             
 34             @Override
 35             public void onClick(View arg0) {
 36                 // TODO Auto-generated method stub
 37                 Editable st;
 38                 st=autotext.getText();
 39                 String str=st.toString();
 40                 view(str);
 41             }
 42         });
 43     }
 44     @Override
 45     public void onBackPressed() {                                        //按返回键回到第一个页面
 46         Intent intent =new Intent(AddApplication.this,MainActivity.class);
 47         startActivity(intent);
 48         finish();
 49     }
 50     public void view(String str){                                        //按下搜索后显示应用
 51         LinearLayout app_add=(LinearLayout)findViewById(R.id.list_app);    //先清空list_app的子布局
 52          int count = app_add.getChildCount();
 53          while(count-1>=0){app_add.removeViewAt(count-1);count--;}
 54             
 55         LayoutInflater inflater = LayoutInflater.from(this);
 56         int i=0;
 57         for(i=0;i<Constant.application.length;i++){                        //把输入字符串与现存所有应用名进行匹配
 58             final int position =i;
 59             if(Constant.application[i].indexOf(str)!=-1){
 60                 View view_0 = inflater.inflate(R.layout.list_view, null);
 61          TextView app_name = (TextView)view_0.findViewById(R.id.app_name);
 62          ImageView app_image= (ImageView)view_0.findViewById(R.id.app_icon);
 63          Button bu_add =(Button)view_0.findViewById(R.id.app_add);
 64                 app_name.setText(Constant.application[i]);
 65                 app_image.setBackgroundResource(Constant.app_icon[i]);
 66                 bu_add.setOnClickListener(new View.OnClickListener() {    //为添加按钮设置监控
 67                       
 68                       @Override
 69                       public void onClick(View arg0) {
 70                           // TODO Auto-generated method stub
 71                           if(verification(position)){                        //如果未添加过该应用则在第一个页面添加并返回第一个页面
 72                               Constant.image[Constant.num]=Constant.image[Constant.num-1];
 73                           Constant.text[Constant.num]=Constant.text[Constant.num-1];
 74                             Constant.image[Constant.num-1]=Constant.app_icon[position];
 75                           Constant.text[Constant.num-1]=Constant.application[position];
 76                           Constant.num++;
 77                             Intent intent =new Intent();
 78                             intent.setClass(AddApplication.this, MainActivity.class);
 79                             startActivity(intent);  
 80                             finish();      
 81                           }else{
 82                               Toast.makeText(AddApplication.this, "该应用你已添加>.<",
 83                                     Toast.LENGTH_SHORT).show();
 84                           }
 85                            
 86                       }
 87                 });
 88                
 89                 app_add.addView(view_0);                                    //往list_app添加子Item
 90             }
 91             
 92         }
 93         
 94     }
 95             private boolean verification(int p){
 96                 for(int i=0;i<Constant.image.length;i++){
 97                     if(Constant.application[p].equals(Constant.text[i])){
 98                         return false;
 99                     }
100                 }
101                 return true;
102 }
103 }

Constant,用来保存测试数据

 1 package com.example.practice1;
 2 
 3 public class Constant {
 4     public static boolean press = false;
 5 public static int num=13;
 6 public static int[] image={R.drawable.image1,
 7     R.drawable.image2,R.drawable.image3,R.drawable.image4,R.drawable.image5,
 8 R.drawable.image6,R.drawable.image7,R.drawable.image8,R.drawable.image9,
 9 R.drawable.image10,R.drawable.image11,R.drawable.image12,R.drawable.image13,0,0,0,0,0,0,0};
10     
11 public static String[] text={"1","2","3","4","5","6","7","8","9","10","11","12","13","0","0","0","0","0","0","0"};
12 public static String[] application ={"微信","QQ","华农宝","飞信","微博","酷狗音乐"};
13 public static int[] app_icon={R.drawable.weixin,R.drawable.qq,R.drawable.huanongbao,R.drawable.feixin,R.drawable.weibo,R.drawable.kugou};
14 
15 }

最后是三个XML 

grid_adapter.XML

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:gravity="center_horizontal" >
     <ImageView   
               android:layout_height="wrap_content"   
               android:id="@+id/ItemImage"   
               android:layout_width="wrap_content"   
               
               >   
              
         </ImageView>  
         <TextView   
               android:layout_width="match_parent"   
               android:layout_height="wrap_content"   
               android:text="TextView01" 
                 android:gravity="center"
               android:id="@+id/ItemText">  
         </TextView>  

</LinearLayout>

  list_view

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
	android:layout_marginTop="5px"
	android:layout_marginLeft="5px"
	android:layout_marginRight="5px"
    android:orientation="horizontal" >
    <LinearLayout 
    android:layout_width="0px"
    android:layout_height="wrap_content"
    android:layout_weight="7"
    android:orientation="horizontal"
        >
        <ImageView 
            android:layout_marginLeft="2px"
            android:layout_marginTop="2px"
            android:layout_marginBottom="2px"
            android:layout_marginRight="2px"
            android:id="@+id/app_icon"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            
            />
        <TextView 
            android:id="@+id/app_name"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal"
            android:gravity="center"
            />
    </LinearLayout>
<LinearLayout 
    android:layout_width="0px"
    android:layout_height="wrap_content"
    android:layout_weight="3"
    android:orientation="horizontal"
    >
    <Button 
        android:layout_marginLeft="2px"
            android:layout_marginTop="2px"
            android:layout_marginBottom="2px"
            android:layout_marginRight="2px"
        android:id="@+id/app_add"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="添加"
        
        />
</LinearLayout>
</LinearLayout>

  addapplication.XML

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
	android:layout_marginTop="5px"
	android:layout_marginLeft="5px"
	android:layout_marginRight="5px"
    android:orientation="horizontal" >
    <LinearLayout 
    android:layout_width="0px"
    android:layout_height="wrap_content"
    android:layout_weight="7"
    android:orientation="horizontal"
        >
        <ImageView 
            android:layout_marginLeft="2px"
            android:layout_marginTop="2px"
            android:layout_marginBottom="2px"
            android:layout_marginRight="2px"
            android:id="@+id/app_icon"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            
            />
        <TextView 
            android:id="@+id/app_name"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal"
            android:gravity="center"
            />
    </LinearLayout>
<LinearLayout 
    android:layout_width="0px"
    android:layout_height="wrap_content"
    android:layout_weight="3"
    android:orientation="horizontal"
    >
    <Button 
        android:layout_marginLeft="2px"
            android:layout_marginTop="2px"
            android:layout_marginBottom="2px"
            android:layout_marginRight="2px"
        android:id="@+id/app_add"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="添加"
        
        />
</LinearLayout>
</LinearLayout>

  

最后附上源码,有需要的请留言留下你的邮箱,供嫌长的童鞋学习学习= = ~

有问题请留言

 

    网友 2015/5/11 11:17:20 发表

    大神,提供一份源码,谢谢!!我的邮箱:zhangwei_7154@163.com

发表评论
用户名: 匿名