添加历史记录浏览

This commit is contained in:
2025-12-07 03:16:49 +08:00
parent 4bf74875ab
commit c00f25dbab
4 changed files with 138 additions and 40 deletions

View File

@@ -1,8 +1,8 @@
#Created by .winboll/winboll_app_build.gradle #Created by .winboll/winboll_app_build.gradle
#Sat Dec 06 18:16:28 GMT 2025 #Sat Dec 06 19:13:59 GMT 2025
stageCount=6 stageCount=6
libraryProject= libraryProject=
baseVersion=15.11 baseVersion=15.11
publishVersion=15.11.5 publishVersion=15.11.5
buildCount=39 buildCount=46
baseBetaVersion=15.11.6 baseBetaVersion=15.11.6

View File

@@ -59,7 +59,7 @@ public class App extends GlobalApplication {
public void onCreate() { public void onCreate() {
super.onCreate(); super.onCreate();
setIsDebugging(BuildConfig.DEBUG); setIsDebugging(BuildConfig.DEBUG);
setIsDebugging(false); //setIsDebugging(false);
WinBoLLActivityManager.init(this); WinBoLLActivityManager.init(this);

View File

@@ -2,6 +2,7 @@ package cc.winboll.studio.winboll;
import android.app.Activity; import android.app.Activity;
import android.os.Bundle; import android.os.Bundle;
import android.os.Handler;
import android.os.Message; import android.os.Message;
import android.view.Menu; import android.view.Menu;
import android.view.MenuItem; import android.view.MenuItem;
@@ -22,26 +23,25 @@ import java.util.ArrayList;
import android.content.Intent; import android.content.Intent;
import cc.winboll.studio.libaes.activitys.AboutActivity; import cc.winboll.studio.libaes.activitys.AboutActivity;
public class MainActivity extends DrawerFragmentActivity implements IWinBoLLActivity { public class MainActivity extends DrawerFragmentActivity {
public static final String TAG = "MainActivity"; public static final String TAG = "MainActivity";
BrowserFragment mBrowserFragment; BrowserFragment mBrowserFragment;
@Override // ------------------- 新增Handler 消息定义接收URL历史更新消息 -------------------
public Activity getActivity() { // 消息标识URL加载历史更新刷新抽屉菜单的历史列表
return null; public static final int MSG_URLLOADHISTORY_UPDATE = 1002;
} // 自定义Handler接收应用内消息如BrowserFragment发送的历史更新消息
private static Handler _mMainHandler;
@Override
public String getTag() {
return TAG;
}
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
// ------------------- 新增初始化MainActivity的Handler关键 -------------------
initMainHandler();
if (mBrowserFragment == null) { if (mBrowserFragment == null) {
mBrowserFragment = new BrowserFragment(); mBrowserFragment = new BrowserFragment();
addFragment(mBrowserFragment); addFragment(mBrowserFragment);
@@ -49,28 +49,75 @@ public class MainActivity extends DrawerFragmentActivity implements IWinBoLLActi
showFragment(mBrowserFragment); showFragment(mBrowserFragment);
} }
public static void sendMessage(Message msg) {
_mMainHandler.sendMessage(msg);
}
/**
* 初始化Handler接收MSG_URLLOADHISTORY_UPDATE消息刷新抽屉历史菜单
*/
private void initMainHandler() {
// 清理旧数据
if (_mMainHandler != null) {
_mMainHandler.removeCallbacksAndMessages(null);
_mMainHandler = null;
}
// Java 7 匿名内部类实现Handler主线程创建安全更新UI/抽屉菜单)
_mMainHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what) {
case MSG_URLLOADHISTORY_UPDATE:
// 处理URL历史更新消息刷新抽屉菜单的历史列表
LogUtils.d(TAG, "收到URL历史更新消息刷新抽屉菜单");
refreshUrlHistoryDrawerMenu();
break;
default:
break;
}
}
};
}
@Override @Override
public void initDrawerMenuItemList(ArrayList<DrawerMenuBean> listDrawerMenu) { public void initDrawerMenuItemList(ArrayList<DrawerMenuBean> listDrawerMenu) {
super.initDrawerMenuItemList(listDrawerMenu); super.initDrawerMenuItemList(listDrawerMenu);
LogUtils.d(TAG, "initDrawerMenuItemList"); //LogUtils.d(TAG, "initDrawerMenuItemList");
//listDrawerMenu.clear(); // 加载URL历史菜单初始化时加载
// 添加抽屉菜单项 refreshUrlHistoryDrawerMenu();
listDrawerMenu.add(new DrawerMenuBean(R.drawable.ic_launcher, TestAButtonFragment.TAG));
listDrawerMenu.add(new DrawerMenuBean(R.drawable.ic_launcher, TestViewPageFragment.TAG));
notifyDrawerMenuDataChanged(); notifyDrawerMenuDataChanged();
} }
@Override @Override
public void reinitDrawerMenuItemList(ArrayList<DrawerMenuBean> listDrawerMenu) { public void reinitDrawerMenuItemList(ArrayList<DrawerMenuBean> listDrawerMenu) {
super.reinitDrawerMenuItemList(listDrawerMenu); super.reinitDrawerMenuItemList(listDrawerMenu);
LogUtils.d(TAG, "reinitDrawerMenuItemList"); //LogUtils.d(TAG, "reinitDrawerMenuItemList");
//listDrawerMenu.clear(); // 重新加载URL历史菜单菜单重置时加载
// 添加抽屉菜单项 refreshUrlHistoryDrawerMenu();
listDrawerMenu.add(new DrawerMenuBean(R.drawable.ic_launcher, TestAButtonFragment.TAG));
listDrawerMenu.add(new DrawerMenuBean(R.drawable.ic_launcher, TestViewPageFragment.TAG));
notifyDrawerMenuDataChanged(); notifyDrawerMenuDataChanged();
} }
void loadUrlLoadHistotyMenu(ArrayList<DrawerMenuBean> listDrawerMenu) {
listDrawerMenu.clear();
if (BrowserFragment._mUrlLoadHistory != null) {
for (String url : BrowserFragment._mUrlLoadHistory) {
listDrawerMenu.add(new DrawerMenuBean(R.drawable.ic_launcher, url));
}
}
}
// ------------------- 新增刷新URL历史抽屉菜单提取独立方法复用 -------------------
private void refreshUrlHistoryDrawerMenu() {
// 获取抽屉菜单列表,重新加载历史数据并刷新
ArrayList<DrawerMenuBean> drawerMenuList = super.malDrawerMenuItem; // 假设父类提供获取菜单列表的方法
if (drawerMenuList != null) {
loadUrlLoadHistotyMenu(drawerMenuList); // 重新加载更新后的历史数据
notifyDrawerMenuDataChanged(); // 通知抽屉菜单刷新UI
}
}
@Override @Override
public DrawerFragmentActivity.ActivityType initActivityType() { public DrawerFragmentActivity.ActivityType initActivityType() {
return DrawerFragmentActivity.ActivityType.Main; return DrawerFragmentActivity.ActivityType.Main;
@@ -85,28 +132,22 @@ public class MainActivity extends DrawerFragmentActivity implements IWinBoLLActi
@Override @Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) { public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
super.onItemClick(parent, view, position, id); super.onItemClick(parent, view, position, id);
switch (position) { if (mBrowserFragment != null && mBrowserFragment.getBrowserHandler() != null) {
case 0 : { Message msg = Message.obtain();
if (mBrowserFragment == null) { msg.what = BrowserFragment.MSG_HISTORY_POSITION;
mBrowserFragment = new BrowserFragment(); msg.obj = position;
addFragment(mBrowserFragment); mBrowserFragment.getBrowserHandler().sendMessage(msg);
}
showFragment(mBrowserFragment);
break;
}
} }
} }
@Override @Override
public boolean onOptionsItemSelected(MenuItem item) { public boolean onOptionsItemSelected(MenuItem item) {
int nItemId = item.getItemId(); int nItemId = item.getItemId();
if(nItemId == R.id.item_home) { if (nItemId == R.id.item_home) {
// 关键:获取BrowserFragment的Handler // 发送MSG_HOMEPAGE消息给BrowserFragment
if (mBrowserFragment != null && mBrowserFragment.getBrowserHandler() != null) { if (mBrowserFragment != null && mBrowserFragment.getBrowserHandler() != null) {
// 创建消息Java 7 显式创建Message
Message msg = Message.obtain(); Message msg = Message.obtain();
msg.what = BrowserFragment.MSG_HOMEPAGE; // 指定消息标识 msg.what = BrowserFragment.MSG_HOMEPAGE;
// 发送消息可携带数据如msg.obj = "额外参数";
mBrowserFragment.getBrowserHandler().sendMessage(msg); mBrowserFragment.getBrowserHandler().sendMessage(msg);
} }
} else if (nItemId == R.id.item_settings) { } else if (nItemId == R.id.item_settings) {
@@ -137,8 +178,23 @@ public class MainActivity extends DrawerFragmentActivity implements IWinBoLLActi
appInfo.setAppHomePage("https://www.winboll.cc/apks/index.php?project=WinBoLL"); appInfo.setAppHomePage("https://www.winboll.cc/apks/index.php?project=WinBoLL");
appInfo.setAppAPKName("WinBoLL"); appInfo.setAppAPKName("WinBoLL");
appInfo.setAppAPKFolderName("WinBoLL"); appInfo.setAppAPKFolderName("WinBoLL");
//appInfo.setIsAddDebugTools(false);
//appInfo.setIsAddDebugTools(BuildConfig.DEBUG);
return appInfo; return appInfo;
} }
// ------------------- 新增对外提供Handler供其他组件发送消息如BrowserFragment -------------------
public Handler getMainHandler() {
return _mMainHandler;
}
// ------------------- 新增生命周期管理防止Handler内存泄漏 -------------------
@Override
protected void onDestroy() {
super.onDestroy();
// 清除Handler所有消息和回调避免内存泄漏
if (_mMainHandler != null) {
_mMainHandler.removeCallbacksAndMessages(null);
_mMainHandler = null;
}
}
} }

View File

@@ -15,8 +15,11 @@ import android.widget.Toast;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment; import androidx.fragment.app.Fragment;
import cc.winboll.studio.winboll.MainActivity;
import cc.winboll.studio.winboll.R; import cc.winboll.studio.winboll.R;
import cc.winboll.studio.winboll.views.WinBoLLView; import cc.winboll.studio.winboll.views.WinBoLLView;
import java.util.ArrayList;
import android.app.Activity;
/** /**
* @Author ZhanGSKen&豆包大模型<zhangsken@qq.com> * @Author ZhanGSKen&豆包大模型<zhangsken@qq.com>
@@ -35,10 +38,13 @@ public class BrowserFragment extends Fragment implements View.OnClickListener, W
private Button mBtnBack; private Button mBtnBack;
private ProgressBar mProgressBar; private ProgressBar mProgressBar;
private WinBoLLView mWinBoLLView; private WinBoLLView mWinBoLLView;
public static ArrayList<String> _mUrlLoadHistory = new ArrayList<String>();
// ------------------- 新增Handler 消息定义(应用内通信) ------------------- // ------------------- 新增Handler 消息定义(应用内通信) -------------------
// 消息标识跳转首页winboll.cc // 消息标识跳转首页winboll.cc
public static final int MSG_HOMEPAGE = 1001; public static final int MSG_HOMEPAGE = 1001;
// 跳转到历史记录位置
public static final int MSG_HISTORY_POSITION = 1002;
// 自定义Handler接收应用内其他页面发送的消息 // 自定义Handler接收应用内其他页面发送的消息
private Handler mBrowserHandler; private Handler mBrowserHandler;
@@ -52,6 +58,9 @@ public class BrowserFragment extends Fragment implements View.OnClickListener, W
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
// 加载布局Java 7 显式强转,无菱形语法) // 加载布局Java 7 显式强转,无菱形语法)
View view = inflater.inflate(R.layout.fragment_browser, container, false); View view = inflater.inflate(R.layout.fragment_browser, container, false);
// 清理旧历史记录
_mUrlLoadHistory.clear();
// 初始化控件 // 初始化控件
initViews(view); initViews(view);
// 绑定事件 // 绑定事件
@@ -129,7 +138,16 @@ public class BrowserFragment extends Fragment implements View.OnClickListener, W
mEtUrl.setText(homeUrl); mEtUrl.setText(homeUrl);
showToast("已跳转至首页"); showToast("已跳转至首页");
break; break;
// 可扩展添加其他消息标识如MSG_OPEN_URL、MSG_REFRESH等 case MSG_HISTORY_POSITION:
int position = (int)msg.obj;
if(-1 < position && position < _mUrlLoadHistory.size()) {
// 处理“跳转首页”消息加载winboll.cc
String historyUrl = _mUrlLoadHistory.get(position);
mWinBoLLView.loadUrlSafe(historyUrl);
mEtUrl.setText(historyUrl);
//showToast("已跳转至" + historyUrl);
}
break;
default: default:
break; break;
} }
@@ -221,6 +239,7 @@ public class BrowserFragment extends Fragment implements View.OnClickListener, W
// 页面加载完成更新输入框URL // 页面加载完成更新输入框URL
if (mEtUrl != null && url != null) { if (mEtUrl != null && url != null) {
mEtUrl.setText(url); mEtUrl.setText(url);
addUrlToHistory(url);
} }
} }
@@ -273,5 +292,28 @@ public class BrowserFragment extends Fragment implements View.OnClickListener, W
mBrowserHandler = null; mBrowserHandler = null;
} }
} }
// 在 BrowserFragment 中添加以下代码Java 7 语法)
/**
* 发送URL历史更新消息给MainActivity当历史列表变化时调用
*/
private void sendUrlHistoryUpdateMsg() {
Message msg = Message.obtain();
msg.what = MainActivity.MSG_URLLOADHISTORY_UPDATE;
MainActivity.sendMessage(msg);
}
// 调用时机示例在BrowserFragment加载URL并更新历史列表后调用
// 假设BrowserFragment中有添加URL到历史的方法
private void addUrlToHistory(String url) {
if (_mUrlLoadHistory == null) {
_mUrlLoadHistory = new ArrayList<String>();
}
if (!_mUrlLoadHistory.contains(url)) {
_mUrlLoadHistory.add(0, url);
// 关键添加历史后发送更新消息通知MainActivity刷新抽屉菜单
sendUrlHistoryUpdateMsg();
}
}
} }