添加历史记录浏览
This commit is contained in:
@@ -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
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user