Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/229.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从通知更改带有意图的选项卡_Java_Android - Fatal编程技术网

Java 从通知更改带有意图的选项卡

Java 从通知更改带有意图的选项卡,java,android,Java,Android,我有一个包含两个选项卡的TabHost活动。此外,我的应用程序基本上有两种不同类型的通知。现在,我想通过单击通知1打开选项卡1,通过单击通知2打开选项卡2。因此,我在通知意图中添加了一个ID,该ID表示选项卡的ID。要更改选项卡,我尝试使用getIntent()在TabHost活动的onResume方法中获取ID。getExtra(…)并更改选项卡。这种解决方案在大多数情况下都有效。然而,它有时不能正常工作,但我不知道为什么。有什么线索可以解释为什么它有时有效,有时无效?或者是否有更好的解决方案

我有一个包含两个选项卡的TabHost活动。此外,我的应用程序基本上有两种不同类型的通知。现在,我想通过单击通知1打开选项卡1,通过单击通知2打开选项卡2。因此,我在通知意图中添加了一个ID,该ID表示选项卡的ID。要更改选项卡,我尝试使用getIntent()在TabHost活动的onResume方法中获取ID。getExtra(…)并更改选项卡。这种解决方案在大多数情况下都有效。然而,它有时不能正常工作,但我不知道为什么。有什么线索可以解释为什么它有时有效,有时无效?或者是否有更好的解决方案来解决此问题?

您必须使用ActivityGroup来解决此问题

但是,请记住,ICS中不推荐使用ActivityGroup

这是我对ActivityGroup的实现:

选项卡中的活动:

Intent i = new Intent(v.getContext(), SearchList.class);
i.putExtra("search", search);

View view = SearchActivityGroup.group.getLocalActivityManager()  
.startActivity("SearchList", i  
.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP))  
.getDecorView();  

// Again, replace the view  
SearchActivityGroup.group.replaceView(view);
ActivityGroup:

package nl.dante.SuperDeals;

import java.util.ArrayList;

import android.app.ActivityGroup;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;

public class SearchActivityGroup extends ActivityGroup {

View rootView;

// Keep this in a static variable to make it accessible for all the nested
// activities, lets them manipulate the view
public static SearchActivityGroup group;

// Need to keep track of the history if you want the back-button to work
// properly, don't use this if your activities requires a lot of memory.
private ArrayList<View> history;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    /*
     * this.history = new ArrayList<View>(); group = this;
     * 
     * // Start the root activity within the group and get its view View
     * view = getLocalActivityManager().startActivity("Search", new
     * Intent(this,Search.class) .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP))
     * .getDecorView();
     * 
     * // Replace the view of this ActivityGroup replaceView(view);
     */

}

@Override
protected void onResume() {

    super.onResume();
    this.history = new ArrayList<View>();
    group = this;

    // Start the root activity within the group and get its view
    View view = getLocalActivityManager().startActivity("Search", new Intent(this, Search.class).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)).getDecorView();

    // Replace the view of this ActivityGroup
    replaceView(view);
}

public void replaceView(View v) {
    // Adds the old one to history
    if (history.size() == 0) {
        if (rootView != null) {
            history.add(rootView);
            rootView = null;
        }
    }
    history.add(v);
    // Changes this Groups View to the new View.
    setContentView(v);
}

public void back() {
    try {
        if (history.size() > 0) {
            if (history.size() == 1) {
                rootView = history.get(0);
                Toasts.ToastImageView(this, "Druk nogmaals BACK om af te sluiten", R.drawable.power_64_off, "red");
            }
            history.remove(history.size() - 1);
            setContentView(history.get(history.size() - 1));
        } else {
            finish();
        }
        if (history.size() < 3) {
            // Tabhost.bannerImage2.setImageResource(0);
            Tabhost.banner.setBackgroundResource(R.drawable.gradient_blue);
        }
        if (history.size() == 2) {
            Tabhost.bannerImage1.setImageResource(R.drawable.sorteer_btn);
        }
    } catch (Exception ex) {
    }
}

public int getHistorySize() {
    return history.size();
}

@Override
public void onBackPressed() {
    try {
        SearchActivityGroup.group.back();
    } catch (Exception ex) {

    }
    return;
}
}
Intent i=newintent(v.getContext(),SearchList.class);
i、 putExtra(“搜索”,搜索);
View=SearchActivityGroup.group.getLocalActivityManager()
.startActivity(“搜索列表”),i
.addFlags(意图.标志\活动\清除\顶部))
.getDecorView();
//再次替换视图
SearchActivityGroup.group.replaceView(视图);
活动组:
包nl.dante.SuperDeals;
导入java.util.ArrayList;
导入android.app.ActivityGroup;
导入android.content.Intent;
导入android.os.Bundle;
导入android.view.view;
公共类SearchActivityGroup扩展ActivityGroup{
视图根视图;
//将其保存在静态变量中,以使所有嵌套的
//活动,让它们操纵视图
公共静态搜索活动组;
//如果希望“后退”按钮正常工作,则需要跟踪历史记录
//正确地说,如果你的活动需要大量内存,就不要使用它。
私家侦探史;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
/*
*this.history=new ArrayList();group=this;
* 
*//启动组内的根活动并获取其视图
*view=getLocalActivityManager().startActivity(“搜索”),新建
*Intent(this,Search.class).addFlags(Intent.FLAG\u ACTIVITY\u CLEAR\u TOP))
*.getDecorView();
* 
*//替换此ActivityGroup的视图replaceView(视图);
*/
}
@凌驾
受保护的void onResume(){
super.onResume();
this.history=new ArrayList();
组=此;
//在组内启动根活动并获取其视图
查看视图=getLocalActivityManager().startActivity(“搜索”,新意图(此,Search.class).addFlags(意图.FLAG\u活动\u清除\u顶部)).getDecorView();
//替换此ActivityGroup的视图
替换视图(视图);
}
公共视图(视图v){
//将旧的添加到历史记录中
if(history.size()==0){
if(rootView!=null){
添加(rootView);
rootView=null;
}
}
历史。添加(v);
//将此组视图更改为新视图。
setContentView(v);
}
公众退票(){
试一试{
if(history.size()>0){
if(history.size()==1){
rootView=history.get(0);
祝酒。祝酒视图(此“Druk nogmaals BACK om af te sluiten”,R.drawable.power_64_off,“红色”);
}
history.remove(history.size()-1);
setContentView(history.get(history.size()-1));
}否则{
完成();
}
if(history.size()<3){
//Tabhost.bannerImage2.setImageResource(0);
Tabhost.banner.setBackgroundResource(R.drawable.gradient\u蓝色);
}
if(history.size()==2){
Tabhost.bannerImage1.setImageResource(R.drawable.sorter_btn);
}
}捕获(例外情况除外){
}
}
public int getHistorySize(){
返回history.size();
}
@凌驾
public void onBackPressed(){
试一试{
SearchActivityGroup.group.back();
}捕获(例外情况除外){
}
返回;
}
}

难道没有更简单的方法吗?当我收到一个新的意图时,为什么我不能直接更改选项卡?