Skip to content

Commit 38335f8

Browse files
committed
修复部分页面可能存在的空指针的情况
1 parent cefb75a commit 38335f8

File tree

7 files changed

+109
-12
lines changed

7 files changed

+109
-12
lines changed

app/src/main/java/com/xuexiang/xuidemo/base/BaseFragment.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,6 @@ protected void finishActivity() {
8989
public void onDestroyView() {
9090
if (mMessageLoader != null) {
9191
mMessageLoader.dismiss();
92-
mMessageLoader = null;
9392
}
9493
super.onDestroyView();
9594
}

app/src/main/java/com/xuexiang/xuidemo/fragment/components/popupwindow/XUIPopupFragment.java

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,11 @@ private void initNormalPopupIfNeed() {
8787
textView.setTextColor(ContextCompat.getColor(getContext(), R.color.xui_config_color_content_text));
8888
textView.setTypeface(XUI.getDefaultTypeface());
8989
mNormalPopup.setContentView(textView);
90-
mNormalPopup.setOnDismissListener(() -> mBtnCommonPopup.setText("显示普通浮层"));
90+
mNormalPopup.setOnDismissListener(() -> {
91+
if (mBtnCommonPopup != null) {
92+
mBtnCommonPopup.setText("显示普通浮层");
93+
}
94+
});
9195
}
9296
}
9397

@@ -108,7 +112,11 @@ private void initListPopupIfNeed() {
108112
XToastUtils.toast("Item " + (i + 1));
109113
mListPopup.dismiss();
110114
});
111-
mListPopup.setOnDismissListener(() -> mBtnListPopup.setText("显示列表浮层"));
115+
mListPopup.setOnDismissListener(() -> {
116+
if (mBtnListPopup != null) {
117+
mBtnListPopup.setText("显示列表浮层");
118+
}
119+
});
112120
}
113121
}
114122
}

app/src/main/java/com/xuexiang/xuidemo/fragment/components/tabbar/tablayout/TabLayoutViewPager2Fragment.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
import com.google.android.material.tabs.TabLayoutMediator;
3232
import com.xuexiang.xaop.annotation.SingleClick;
3333
import com.xuexiang.xpage.annotation.Page;
34+
import com.xuexiang.xui.utils.ViewUtils;
3435
import com.xuexiang.xui.utils.WidgetUtils;
3536
import com.xuexiang.xui.widget.actionbar.TitleBar;
3637
import com.xuexiang.xuidemo.R;
@@ -145,6 +146,9 @@ public void onAnimationEnd(Animator animation) {
145146
}
146147

147148
private void refreshAdapter(boolean isShow) {
149+
if (viewPager == null) {
150+
return;
151+
}
148152
if (isShow) {
149153
// 动态加载选项卡内容
150154
for (String page : MultiPage.getPageNames()) {
@@ -160,8 +164,8 @@ private void refreshAdapter(boolean isShow) {
160164

161165

162166
private void switchContainer(boolean isShow) {
163-
tvTitle.setVisibility(isShow ? View.GONE : View.VISIBLE);
164-
viewPager.setVisibility(isShow ? View.VISIBLE : View.GONE);
167+
ViewUtils.setVisibility(tvTitle, !isShow);
168+
ViewUtils.setVisibility(viewPager, isShow);
165169
}
166170

167171

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
/*
2+
* Copyright (C) 2020 xuexiangjys(xuexiangjys@163.com)
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*
16+
*/
17+
18+
package com.xuexiang.xui.utils;
19+
20+
import androidx.annotation.Nullable;
21+
22+
import java.util.Collection;
23+
import java.util.List;
24+
25+
/**
26+
* 集合工具类
27+
*
28+
* @author xuexiang
29+
* @since 2020/8/25 11:58 PM
30+
*/
31+
public final class CollectionUtils {
32+
33+
private CollectionUtils() {
34+
throw new UnsupportedOperationException("u can't instantiate me...");
35+
}
36+
37+
/**
38+
* 集合的索引是否有效
39+
*
40+
* @param collection 集合
41+
* @param index 索引
42+
* @return true: 有效,false:无效
43+
*/
44+
public static <E> boolean isIndexValid(final Collection<E> collection, final int index) {
45+
return collection != null && index >= 0 && index < collection.size();
46+
}
47+
48+
/**
49+
* 获取集合指定索引的元素
50+
*
51+
* @param list 集合
52+
* @param index 索引
53+
* @param <E>
54+
* @return 集合指定索引的元素
55+
*/
56+
@Nullable
57+
public static <E> E getListItem(final List<E> list, final int index) {
58+
return isIndexValid(list, index) ? list.get(index) : null;
59+
}
60+
61+
/**
62+
* 获取集合的大小
63+
*
64+
* @param collection 集合
65+
* @return 集合的大小
66+
*/
67+
public static <E> int getSize(final Collection<E> collection) {
68+
return collection != null ? collection.size() : 0;
69+
}
70+
71+
}

xui_lib/src/main/java/com/xuexiang/xui/utils/Utils.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,6 @@
3333
import android.graphics.drawable.BitmapDrawable;
3434
import android.graphics.drawable.Drawable;
3535
import android.os.Build;
36-
import androidx.annotation.ColorInt;
37-
import androidx.annotation.Nullable;
3836
import android.text.TextUtils;
3937
import android.view.View;
4038
import android.view.ViewGroup;
@@ -44,6 +42,9 @@
4442
import android.widget.ListView;
4543
import android.widget.RelativeLayout.LayoutParams;
4644

45+
import androidx.annotation.ColorInt;
46+
import androidx.annotation.Nullable;
47+
4748
import java.io.Closeable;
4849
import java.io.File;
4950
import java.io.IOException;

xui_lib/src/main/java/com/xuexiang/xui/widget/imageview/crop/CropImageView.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -365,6 +365,9 @@ public Bitmap cropImage() {
365365
*/
366366
public Bitmap cropImage(boolean isContinueCrop) {
367367
Bitmap bitmap = getCroppedImage();
368+
if (bitmap == null) {
369+
return null;
370+
}
368371
setImageBitmap(bitmap);
369372
if (!isContinueCrop) {
370373
setCropOverlayViewVisibility(GONE);
@@ -379,6 +382,9 @@ public Bitmap cropImage(boolean isContinueCrop) {
379382
* @return 剪切区域图
380383
*/
381384
public Bitmap getCroppedImage() {
385+
if (mBitmap == null) {
386+
return null;
387+
}
382388

383389
final Rect displayedImageRect = ImageViewUtil.getBitmapRectCenterInside(mBitmap, mImageView);
384390

@@ -517,6 +523,9 @@ public void setAspectRatio(int aspectRatioX, int aspectRatioY) {
517523
* 旋转度数
518524
*/
519525
public void rotateImage(int degrees) {
526+
if (mBitmap == null) {
527+
return;
528+
}
520529
Matrix matrix = new Matrix();
521530
matrix.postRotate(degrees);
522531
mBitmap = Bitmap.createBitmap(mBitmap, 0, 0, mBitmap.getWidth(), mBitmap.getHeight(), matrix, true);
@@ -536,6 +545,9 @@ public void rotateImage(int degrees) {
536545
* @author jarlen
537546
*/
538547
public void reverseImage(CropImageType.REVERSE_TYPE type) {
548+
if (mBitmap == null) {
549+
return;
550+
}
539551
Matrix matrix = new Matrix();
540552

541553
if (type == CropImageType.REVERSE_TYPE.UP_DOWN) {

xui_lib/src/main/java/com/xuexiang/xui/widget/imageview/preview/ui/PreviewActivity.java

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
import androidx.viewpager.widget.ViewPager;
3333

3434
import com.xuexiang.xui.R;
35+
import com.xuexiang.xui.utils.CollectionUtils;
3536
import com.xuexiang.xui.widget.imageview.preview.MediaLoader;
3637
import com.xuexiang.xui.widget.imageview.preview.PreviewBuilder;
3738
import com.xuexiang.xui.widget.imageview.preview.enitity.IPreviewInfo;
@@ -211,16 +212,17 @@ public void onPageScrollStateChanged(int state) {
211212
mViewPager.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
212213
@Override
213214
public void onGlobalLayout() {
214-
mViewPager.getViewTreeObserver().removeGlobalOnLayoutListener(this);
215-
BasePhotoFragment fragment = fragments.get(mCurrentIndex);
216-
fragment.transformIn();
215+
mViewPager.getViewTreeObserver().removeOnGlobalLayoutListener(this);
216+
BasePhotoFragment fragment = CollectionUtils.getListItem(fragments, mCurrentIndex);
217+
if (fragment != null) {
218+
fragment.transformIn();
219+
}
217220
}
218221
});
219-
220222
}
221223

222224
private int getImgSize() {
223-
return mImgUrls != null ? mImgUrls.size() : 0;
225+
return CollectionUtils.getSize(mImgUrls);
224226
}
225227

226228
/***退出预览的动画***/

0 commit comments

Comments
 (0)