---恢復內(nèi)容開始---
動態(tài)添加應用 具有長按刪除功能 功能如下圖:
? ? ?
? ?
? ?
? ?
(圖片顯示功能不是你要的,那就默默關閉頁面吧)
設計思路:
頁面一:用girdview網(wǎng)格顯示圖標,在自定義的adapter中為每一個子Item添加內(nèi)容并且加上點擊事件(長按和短按),“+”button跳轉到第二個頁面。
頁面二:用AutoCompeleteTextView帶提示的輸入框,用adapter為其添加提示字符串組,確認顯示所搜索到的應用,這里顯示搜索到的應用我不是用ListView,而是在代碼中動態(tài)添加布局,每一次按“搜索”前先清空里面的子布局。按”添加“后判斷該應用是否已經(jīng)添加,沒有的話就在頁面一加上,并且返回頁面一。
注意:數(shù)據(jù)我是用常量類Constant,沒有介入SQL,只為測試方便。判斷當前是否是長按狀態(tài)下我用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() {
//
長按后 不想刪除 按返回鍵的觸發(fā)事件
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("華農(nóng)寶")){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.notifyDataSetChanged();
//
更新
76
}
77
}
78
79
private
class
appClick
implements
OnTouchListener{
//
子Item的OnTouch觸發(fā)事件
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();
//
當前時間對應的毫秒數(shù)
94
95
long
Time = endMili-startMili;
//
時間差
96
Log.v("time"
,Long.toString(Time));
97
98
if
(Time>1000){
//
根據(jù)時間差來判斷是短按還是長按,這里標準時一秒
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();
//
當前時間對應的毫秒數(shù)
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.notifyDataSetChanged();
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("華農(nóng)寶")){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.notifyDataSetChanged();
//
更新
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() {
//
搜索按鈕的觸發(fā)事件
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++){
//
把輸入字符串與現(xiàn)存所有應用名進行匹配
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() {
//
為添加按鈕設置監(jiān)控
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,用來保存測試數(shù)據(jù)
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","華農(nóng)寶","飛信","微博","酷狗音樂"
};
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>
最后附上源碼,有需要的請留言留下你的郵箱,供嫌長的童鞋學習學習= = ~
有問題請留言
?
更多文章、技術交流、商務合作、聯(lián)系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元

