Skip to content

Commit a88a73a

Browse files
committed
modify 修改listview的刷新,还是没有进展啊,由于缓存没有同步
1 parent 07ba92b commit a88a73a

File tree

3 files changed

+31
-38
lines changed

3 files changed

+31
-38
lines changed

res/layout/app_list_item.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131
android:layout_height="wrap_content"
3232
android:layout_centerVertical="true"
3333
android:layout_alignParentRight="true"
34-
34+
android:focusable="false"
3535
android:layout_marginRight="10dip"
3636
android:paddingRight="6dip"/>
3737
<!-- 如果不设置为false的话,listview的onitemclick事件就会被button的事件屏蔽 android:focusable="false" -->

src/com/konka/switchnotifications/AppsListAdapter.java

Lines changed: 26 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ public class AppsListAdapter extends BaseAdapter {
2727
private LayoutInflater mLayoutInflater;
2828
private List<AppInfo> mData;
2929
private ViewHolder viewHolder;
30-
// public ArrayList<Integer> mChangePos = new ArrayList<Integer>();//存放数据改变过的位置,并且记录起来,在列表滑动的时候进行修改
30+
//存放数据改变过的位置,并且记录起来,在列表滑动的时候进行修改
3131
public int[] mChangePosition;
3232
public static final int THE_POSITION_CHANGED = 8;
3333

@@ -40,7 +40,7 @@ public AppsListAdapter(Context context, List<AppInfo> data)
4040
mChangePosition = new int[mData.size()];
4141
for(int i = 0; i < mData.size(); i ++)
4242
{
43-
Log.i(MainActivity.TAG, "init mChangePosition");
43+
// Log.i(MainActivity.TAGS, "init mChangePosition");
4444
mChangePosition[i] = 0;
4545
}
4646
}
@@ -66,43 +66,37 @@ public long getItemId(int arg0) {
6666
@Override
6767
public View getView(int position, View convertView, ViewGroup parent) {
6868
// 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+
{
7777
convertView = mLayoutInflater.inflate(R.layout.app_list_item, null);
7878
viewHolder = new ViewHolder();
7979
viewHolder.iv_app = (ImageView)convertView.findViewById(R.id.iv_app_icon);
8080
viewHolder.tv_app = (TextView)convertView.findViewById(R.id.tv_app_name);
8181
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+
}
9590

9691
//设置图标、名称、消息通知可否
9792
viewHolder.iv_app.setImageDrawable(mData.get(position).appIcon);
9893
viewHolder.tv_app.setText(mData.get(position).appName);
99-
Log.v(MainActivity.TAG, "getView Position = " + position
94+
Log.v(MainActivity.TAGS, "getView Position = " + position
10095
+ ", pkgName = " + mData.get(position).appName
10196
+ ", appCanNotification = " + mData.get(position).appCanNotification);
10297
viewHolder.sbtn_app.setChecked(mData.get(position).appCanNotification);
10398
//如果要针对每一行的switchbutton响应滑动操作,就需要针对每个按钮设置监听函数。为了区别是哪个应用
10499
//需要传入position来确定
105-
106100
// viewHolder.sbtn_app.setOnCheckedChangeListener(new SwitchButtonOnCheckedChangeListener(position));
107101

108102
return convertView;
@@ -123,19 +117,17 @@ public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
123117
// TODO Auto-generated method stub
124118

125119
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);
130122
if(vid == viewHolder.sbtn_app.getId())
131123
{
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
136125
ifCanNotify(mData.get(mPosition).packageName, isChecked);
137126
//标识这个位置的元素改变了。
138127
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]);
139131
}
140132
}
141133

@@ -146,7 +138,6 @@ public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
146138
*/
147139
private void ifCanNotify(String pkgName, boolean isChecked)
148140
{
149-
Log.e(MainActivity.TAG, "ifCanNotify");
150141
nm = INotificationManager.Stub.asInterface(
151142
ServiceManager.getService(Context.NOTIFICATION_SERVICE));
152143
try {
@@ -156,7 +147,7 @@ private void ifCanNotify(String pkgName, boolean isChecked)
156147
// sortTime = SystemClock.uptimeMillis();
157148
nm.setNotificationsEnabledForPackage(pkgName, isChecked);
158149
// Log.i(MainActivity.TAG, "修改应用通知时间:" + (SystemClock.uptimeMillis() - sortTime));
159-
Log.i(MainActivity.TAG, "ifCanNotify pkgName = " + pkgName
150+
Log.i(MainActivity.TAGS, "ifCanNotify pkgName = " + pkgName
160151
+ ", mPosition = " + mPosition
161152
+ ", isChecked = " + isChecked
162153
+ ", 系统设置中通知开关 = " + nm.areNotificationsEnabledForPackage(pkgName));

src/com/konka/switchnotifications/MainActivity.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525

2626
public class MainActivity extends Activity {
2727
public static final String TAG = "SwitchNotificationssss";
28+
public static final String TAGS = "SwitchNotificationssss2";
2829
private PackageManager mPackageManager;
2930
private List<PackageInfo> mPackageInfoList;
3031
private ArrayList<AppInfo> mAppsList;//存放所有安装程序的数据
@@ -133,13 +134,14 @@ public void handleMessage(Message msg) {
133134
mAppsAdp = new AppsListAdapter(mContext, mAppsList);
134135
lv_apps.setAdapter(mAppsAdp);
135136
mAppsAdp.notifyDataSetChanged();
136-
lv_apps.setVisibility(View.VISIBLE);
137137
mLayoutContainerLoading.setVisibility(View.INVISIBLE);
138+
lv_apps.setVisibility(View.VISIBLE);
139+
138140
break;
139141
}
140142
super.handleMessage(msg);
141143
}
142-
144+
143145
};
144146

145147

0 commit comments

Comments
 (0)