@@ -27,7 +27,7 @@ public class AppsListAdapter extends BaseAdapter {
27
27
private LayoutInflater mLayoutInflater ;
28
28
private List <AppInfo > mData ;
29
29
private ViewHolder viewHolder ;
30
- // public ArrayList<Integer> mChangePos = new ArrayList<Integer>(); //存放数据改变过的位置,并且记录起来,在列表滑动的时候进行修改
30
+ //存放数据改变过的位置,并且记录起来,在列表滑动的时候进行修改
31
31
public int [] mChangePosition ;
32
32
public static final int THE_POSITION_CHANGED = 8 ;
33
33
@@ -40,7 +40,7 @@ public AppsListAdapter(Context context, List<AppInfo> data)
40
40
mChangePosition = new int [mData .size ()];
41
41
for (int i = 0 ; i < mData .size (); i ++)
42
42
{
43
- Log .i (MainActivity .TAG , "init mChangePosition" );
43
+ // Log.i(MainActivity.TAGS , "init mChangePosition");
44
44
mChangePosition [i ] = 0 ;
45
45
}
46
46
}
@@ -66,43 +66,37 @@ public long getItemId(int arg0) {
66
66
@ Override
67
67
public View getView (int position , View convertView , ViewGroup parent ) {
68
68
// TODO Auto-generated method stub
69
- // Log.i(MainActivity.TAG, "被改变的行mChangePosition[position] = " + mChangePosition[position]);
70
- // if(mChangePosition[position] == 8)
71
- // {
72
- // Log.i(MainActivity.TAG , "被改变的行position = " + position);
73
- // AppsListAdapter.this.notifyDataSetChanged() ;
74
- // }
75
- // if(( convertView == null) || (mChangePosition[position] == 8) )
76
- // {
69
+ //如果是有改变的行,那么就不使用缓存数据,直接重新赋值
70
+ if (mChangePosition [position ] == 8 )
71
+ {
72
+ Log .i (MainActivity .TAGS , "值有改变的行mChangePosition[" + position + "] = " + mChangePosition [ position ] );
73
+ convertView = null ;
74
+ }
75
+ if (convertView == null )
76
+ {
77
77
convertView = mLayoutInflater .inflate (R .layout .app_list_item , null );
78
78
viewHolder = new ViewHolder ();
79
79
viewHolder .iv_app = (ImageView )convertView .findViewById (R .id .iv_app_icon );
80
80
viewHolder .tv_app = (TextView )convertView .findViewById (R .id .tv_app_name );
81
81
viewHolder .sbtn_app = (SwitchButton )convertView .findViewById (R .id .sb_switch );
82
- // //似乎注册两次监听函数,会导致这个控件上会产生重复的监听和触发
83
- // if(mChangePosition[position] != 8)
84
- // {
85
- viewHolder .sbtn_app .setOnCheckedChangeListener (new SwitchButtonOnCheckedChangeListener (position ));
86
- // }
87
-
88
- Log .i (MainActivity .TAG , "convertView为空,只设置一次监听函数。" );
89
- // convertView.setTag(viewHolder);
90
- // }else
91
- // {
92
- // Log.i(MainActivity.TAG, "convertView不为空");
93
- // viewHolder = (ViewHolder)convertView.getTag();
94
- // }
82
+ viewHolder .sbtn_app .setOnCheckedChangeListener (new SwitchButtonOnCheckedChangeListener (position ));
83
+ Log .i (MainActivity .TAGS , "convertView为空。position = " + position );
84
+ convertView .setTag (viewHolder );
85
+ }else
86
+ {
87
+ Log .i (MainActivity .TAGS , "视图不为空 Position = " + position );
88
+ viewHolder = (ViewHolder )convertView .getTag ();
89
+ }
95
90
96
91
//设置图标、名称、消息通知可否
97
92
viewHolder .iv_app .setImageDrawable (mData .get (position ).appIcon );
98
93
viewHolder .tv_app .setText (mData .get (position ).appName );
99
- Log .v (MainActivity .TAG , "getView Position = " + position
94
+ Log .v (MainActivity .TAGS , "getView Position = " + position
100
95
+ ", pkgName = " + mData .get (position ).appName
101
96
+ ", appCanNotification = " + mData .get (position ).appCanNotification );
102
97
viewHolder .sbtn_app .setChecked (mData .get (position ).appCanNotification );
103
98
//如果要针对每一行的switchbutton响应滑动操作,就需要针对每个按钮设置监听函数。为了区别是哪个应用
104
99
//需要传入position来确定
105
-
106
100
// viewHolder.sbtn_app.setOnCheckedChangeListener(new SwitchButtonOnCheckedChangeListener(position));
107
101
108
102
return convertView ;
@@ -123,19 +117,17 @@ public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
123
117
// TODO Auto-generated method stub
124
118
125
119
int vid = buttonView .getId ();
126
- Log .e (MainActivity .TAG , "onCheckedChanged11111 Position = " + mPosition
127
- + ", pkgName = " + mData .get (mPosition ).packageName
128
- + ", vid = " + vid
129
- + ", sbtn_app id = " + viewHolder .sbtn_app .getId ());
120
+ Log .e (MainActivity .TAGS , "按钮的响应函数(onCheckedChanged) Position = " + mPosition
121
+ + ", pkgName = " + mData .get (mPosition ).packageName );
130
122
if (vid == viewHolder .sbtn_app .getId ())
131
123
{
132
- //可以在这里对触发的每个程序进行设置。当关闭的时候isChecked为false,如果打开则为true
133
- Log .e (MainActivity .TAG , "onCheckedChanged Position = " + mPosition
134
- + ", pkgName = " + mData .get (mPosition ).packageName
135
- + ", isChecked = " + isChecked + ", mChangePosition[mPosition] = " + mChangePosition [mPosition ]);
124
+ //可以在这里对触发的每个程序进行设置。当关闭的时候isChecked为false,如果打开则为true
136
125
ifCanNotify (mData .get (mPosition ).packageName , isChecked );
137
126
//标识这个位置的元素改变了。
138
127
mChangePosition [mPosition ] = THE_POSITION_CHANGED ;
128
+ Log .e (MainActivity .TAGS , "在响应函数中将新的值写入系统中onCheckedChanged Position = " + mPosition
129
+ + ", pkgName = " + mData .get (mPosition ).packageName
130
+ + ", isChecked = " + isChecked + ", mChangePosition[" + mPosition + "] = " + mChangePosition [mPosition ]);
139
131
}
140
132
}
141
133
@@ -146,7 +138,6 @@ public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
146
138
*/
147
139
private void ifCanNotify (String pkgName , boolean isChecked )
148
140
{
149
- Log .e (MainActivity .TAG , "ifCanNotify" );
150
141
nm = INotificationManager .Stub .asInterface (
151
142
ServiceManager .getService (Context .NOTIFICATION_SERVICE ));
152
143
try {
@@ -156,7 +147,7 @@ private void ifCanNotify(String pkgName, boolean isChecked)
156
147
// sortTime = SystemClock.uptimeMillis();
157
148
nm .setNotificationsEnabledForPackage (pkgName , isChecked );
158
149
// Log.i(MainActivity.TAG, "修改应用通知时间:" + (SystemClock.uptimeMillis() - sortTime));
159
- Log .i (MainActivity .TAG , "ifCanNotify pkgName = " + pkgName
150
+ Log .i (MainActivity .TAGS , "ifCanNotify pkgName = " + pkgName
160
151
+ ", mPosition = " + mPosition
161
152
+ ", isChecked = " + isChecked
162
153
+ ", 系统设置中通知开关 = " + nm .areNotificationsEnabledForPackage (pkgName ));
0 commit comments