//main
Stack<StackElement> stack;
LinearLayout mainView;
//bottom
Button btnMaterialManage;
Button btnProductManage;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Helper.mainActivity = this;
//main
stack = new Stack<StackElement>();
mainView =(LinearLayout)findViewById(R.id.layoutmain);
//--------------------------------------------
//栈的最底层是主界面
//始终处于栈的最底层,除非程序退出,否则不会清空栈。
Intent intent = new Intent(this,MainViewActivity.class);
addView(intent,mainView,stack);
//--------------------------------------------
btnMaterialManage = (Button)findViewById(R.id.btnMaterialManager);
btnMaterialManage.setOnClickListener(btnMaterialManageListener);
SwithButtonState(false,btnMaterialManage);
btnProductManage = (Button)findViewById(R.id.btnProductManager);
btnProductManage.setOnClickListener(btnProductManagerListener);
SwithButtonState(false,btnProductManage);
}
//按钮设置
public void SwithButtonState(boolean isClicked,Button whichButton)
{
//点击过
if(isClicked)
{
whichButton.setBackgroundColor(Color.RED);
whichButton.setClickable(false);
}
else
{
whichButton.setBackgroundColor(Color.GREEN);
whichButton.setClickable(true);
}
}
//产品管理
public OnClickListener btnProductManagerListener = new OnClickListener(){
public void onClick(View v)
{
clearStack(stack);//仅保留主界面的View
GotoProductManager();
SwithButtonState(false,btnMaterialManage);
SwithButtonState(true,btnProductManage);
}
};
//原料管理
public OnClickListener btnMaterialManageListener = new OnClickListener(){
public void onClick(View v)
{
clearStack(stack);
GotoMaterial();
SwithButtonState(false, btnProductManage);
SwithButtonState(true,btnMaterialManage);
}
};
/*用来向栈顶添加一个元素并显示*/
public void addView(Intent intent,LinearLayout layout,Stack<StackElement> stacknew)
{
String str = UUID.randomUUID().toString();
layout.removeAllViews();
View view = getLocalActivityManager().startActivity(str, intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)).getDecorView();
layout.addView(view,new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.FILL_PARENT));
layout.requestFocus();
/* 生成一个栈内缓存对象,主要包括activity对应的view和对应的key,并压入栈中*/
StackElement element = new StackElement(str,view);
stacknew.add(element);
Log.i("栈中Activity的个数", String.valueOf(stacknew.size()));
}
/*弹栈操作*/
int pop(Stack<StackElement> stacknew,LinearLayout layout) {
// 先判断是否已经是栈顶元素了
int size = stacknew.size();
StackElement element = null;
if (size > 1) {
// 如果不是,获取到栈顶元素,并销毁.然后再获取当前的栈顶元素,显示到activityGroup
element = stacknew.pop();
getLocalActivityManager().destroyActivity(element.getTag(), true);
element = stacknew.peek();
} else if (size == 1) {
// 如果是栈顶元素,直接显示
element = stacknew.peek();
}
layout.removeAllViews();
layout.addView(element.getView());
layout.requestFocus();
Log.i("栈中Activity的个数", String.valueOf(stacknew.size()) );
return stacknew.size();
}
// 清空Stack,仅保留最底层的view
void clearStack(Stack<StackElement> stacknew) {
int size = stacknew.size();
if (size > 1) {
for (int i = 0; i < size - 1; i++) {
stacknew.pop();
}
}
}
void clearAll(Stack<StackElement> stacknew) {
int size = stacknew.size();
if (size > 0) {
for (int i = 0; i < size; i++) {
StackElement element = stacknew.pop();
getLocalActivityManager().destroyActivity(element.getTag(), true);
}
}
}
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
// 对键盘事件的处理,如果当前activityGroup中已经载入了activity,则分发给子activity处理,如果没有则自己处理.
if (getCurrentActivity() != null) {
return getCurrentActivity().dispatchKeyEvent(event);
} else {
return super.dispatchKeyEvent(event);
}
}
Android开发六:栈 ActivityGroup
最新推荐文章于 2021-06-03 16:46:46 发布