添加历史记录浏览
This commit is contained in:
@@ -1,8 +1,8 @@
|
||||
#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
|
||||
libraryProject=
|
||||
baseVersion=15.11
|
||||
publishVersion=15.11.5
|
||||
buildCount=39
|
||||
buildCount=46
|
||||
baseBetaVersion=15.11.6
|
||||
|
||||
@@ -59,7 +59,7 @@ public class App extends GlobalApplication {
|
||||
public void onCreate() {
|
||||
super.onCreate();
|
||||
setIsDebugging(BuildConfig.DEBUG);
|
||||
setIsDebugging(false);
|
||||
//setIsDebugging(false);
|
||||
|
||||
WinBoLLActivityManager.init(this);
|
||||
|
||||
|
||||
@@ -2,6 +2,7 @@ package cc.winboll.studio.winboll;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.os.Bundle;
|
||||
import android.os.Handler;
|
||||
import android.os.Message;
|
||||
import android.view.Menu;
|
||||
import android.view.MenuItem;
|
||||
@@ -22,26 +23,25 @@ import java.util.ArrayList;
|
||||
import android.content.Intent;
|
||||
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";
|
||||
|
||||
BrowserFragment mBrowserFragment;
|
||||
|
||||
@Override
|
||||
public Activity getActivity() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getTag() {
|
||||
return TAG;
|
||||
}
|
||||
// ------------------- 新增:Handler 消息定义(接收URL历史更新消息) -------------------
|
||||
// 消息标识:URL加载历史更新(刷新抽屉菜单的历史列表)
|
||||
public static final int MSG_URLLOADHISTORY_UPDATE = 1002;
|
||||
// 自定义Handler(接收应用内消息,如BrowserFragment发送的历史更新消息)
|
||||
private static Handler _mMainHandler;
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
// ------------------- 新增:初始化MainActivity的Handler(关键) -------------------
|
||||
initMainHandler();
|
||||
|
||||
if (mBrowserFragment == null) {
|
||||
mBrowserFragment = new BrowserFragment();
|
||||
addFragment(mBrowserFragment);
|
||||
@@ -49,28 +49,75 @@ public class MainActivity extends DrawerFragmentActivity implements IWinBoLLActi
|
||||
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
|
||||
public void initDrawerMenuItemList(ArrayList<DrawerMenuBean> listDrawerMenu) {
|
||||
super.initDrawerMenuItemList(listDrawerMenu);
|
||||
LogUtils.d(TAG, "initDrawerMenuItemList");
|
||||
//listDrawerMenu.clear();
|
||||
// 添加抽屉菜单项
|
||||
listDrawerMenu.add(new DrawerMenuBean(R.drawable.ic_launcher, TestAButtonFragment.TAG));
|
||||
listDrawerMenu.add(new DrawerMenuBean(R.drawable.ic_launcher, TestViewPageFragment.TAG));
|
||||
//LogUtils.d(TAG, "initDrawerMenuItemList");
|
||||
// 加载URL历史菜单(初始化时加载)
|
||||
refreshUrlHistoryDrawerMenu();
|
||||
notifyDrawerMenuDataChanged();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void reinitDrawerMenuItemList(ArrayList<DrawerMenuBean> listDrawerMenu) {
|
||||
super.reinitDrawerMenuItemList(listDrawerMenu);
|
||||
LogUtils.d(TAG, "reinitDrawerMenuItemList");
|
||||
//listDrawerMenu.clear();
|
||||
// 添加抽屉菜单项
|
||||
listDrawerMenu.add(new DrawerMenuBean(R.drawable.ic_launcher, TestAButtonFragment.TAG));
|
||||
listDrawerMenu.add(new DrawerMenuBean(R.drawable.ic_launcher, TestViewPageFragment.TAG));
|
||||
//LogUtils.d(TAG, "reinitDrawerMenuItemList");
|
||||
// 重新加载URL历史菜单(菜单重置时加载)
|
||||
refreshUrlHistoryDrawerMenu();
|
||||
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
|
||||
public DrawerFragmentActivity.ActivityType initActivityType() {
|
||||
return DrawerFragmentActivity.ActivityType.Main;
|
||||
@@ -85,15 +132,11 @@ public class MainActivity extends DrawerFragmentActivity implements IWinBoLLActi
|
||||
@Override
|
||||
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
|
||||
super.onItemClick(parent, view, position, id);
|
||||
switch (position) {
|
||||
case 0 : {
|
||||
if (mBrowserFragment == null) {
|
||||
mBrowserFragment = new BrowserFragment();
|
||||
addFragment(mBrowserFragment);
|
||||
}
|
||||
showFragment(mBrowserFragment);
|
||||
break;
|
||||
}
|
||||
if (mBrowserFragment != null && mBrowserFragment.getBrowserHandler() != null) {
|
||||
Message msg = Message.obtain();
|
||||
msg.what = BrowserFragment.MSG_HISTORY_POSITION;
|
||||
msg.obj = position;
|
||||
mBrowserFragment.getBrowserHandler().sendMessage(msg);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -101,12 +144,10 @@ public class MainActivity extends DrawerFragmentActivity implements IWinBoLLActi
|
||||
public boolean onOptionsItemSelected(MenuItem item) {
|
||||
int nItemId = item.getItemId();
|
||||
if (nItemId == R.id.item_home) {
|
||||
// 关键:获取BrowserFragment的Handler
|
||||
// 发送MSG_HOMEPAGE消息给BrowserFragment
|
||||
if (mBrowserFragment != null && mBrowserFragment.getBrowserHandler() != null) {
|
||||
// 创建消息(Java 7 显式创建Message)
|
||||
Message msg = Message.obtain();
|
||||
msg.what = BrowserFragment.MSG_HOMEPAGE; // 指定消息标识
|
||||
// 发送消息(可携带数据,如msg.obj = "额外参数";)
|
||||
msg.what = BrowserFragment.MSG_HOMEPAGE;
|
||||
mBrowserFragment.getBrowserHandler().sendMessage(msg);
|
||||
}
|
||||
} 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.setAppAPKName("WinBoLL");
|
||||
appInfo.setAppAPKFolderName("WinBoLL");
|
||||
//appInfo.setIsAddDebugTools(false);
|
||||
//appInfo.setIsAddDebugTools(BuildConfig.DEBUG);
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -15,8 +15,11 @@ import android.widget.Toast;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.fragment.app.Fragment;
|
||||
import cc.winboll.studio.winboll.MainActivity;
|
||||
import cc.winboll.studio.winboll.R;
|
||||
import cc.winboll.studio.winboll.views.WinBoLLView;
|
||||
import java.util.ArrayList;
|
||||
import android.app.Activity;
|
||||
|
||||
/**
|
||||
* @Author ZhanGSKen&豆包大模型<zhangsken@qq.com>
|
||||
@@ -35,10 +38,13 @@ public class BrowserFragment extends Fragment implements View.OnClickListener, W
|
||||
private Button mBtnBack;
|
||||
private ProgressBar mProgressBar;
|
||||
private WinBoLLView mWinBoLLView;
|
||||
public static ArrayList<String> _mUrlLoadHistory = new ArrayList<String>();
|
||||
|
||||
// ------------------- 新增:Handler 消息定义(应用内通信) -------------------
|
||||
// 消息标识:跳转首页(winboll.cc)
|
||||
public static final int MSG_HOMEPAGE = 1001;
|
||||
// 跳转到历史记录位置
|
||||
public static final int MSG_HISTORY_POSITION = 1002;
|
||||
// 自定义Handler(接收应用内其他页面发送的消息)
|
||||
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) {
|
||||
// 加载布局(Java 7 显式强转,无菱形语法)
|
||||
View view = inflater.inflate(R.layout.fragment_browser, container, false);
|
||||
// 清理旧历史记录
|
||||
_mUrlLoadHistory.clear();
|
||||
|
||||
// 初始化控件
|
||||
initViews(view);
|
||||
// 绑定事件
|
||||
@@ -129,7 +138,16 @@ public class BrowserFragment extends Fragment implements View.OnClickListener, W
|
||||
mEtUrl.setText(homeUrl);
|
||||
showToast("已跳转至首页");
|
||||
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:
|
||||
break;
|
||||
}
|
||||
@@ -221,6 +239,7 @@ public class BrowserFragment extends Fragment implements View.OnClickListener, W
|
||||
// 页面加载完成:更新输入框URL
|
||||
if (mEtUrl != null && url != null) {
|
||||
mEtUrl.setText(url);
|
||||
addUrlToHistory(url);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -273,5 +292,28 @@ public class BrowserFragment extends Fragment implements View.OnClickListener, W
|
||||
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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user