在android中如何使用intent从外部类调用内部类?

在android中如何使用intent从外部类调用内部类?,android,android-intent,Android,Android Intent,我正在开发android应用程序,该应用程序的操作栏包含刷新按钮和溢出菜单,操作栏下方有两个堆叠的选项卡。当我单击“刷新”按钮时,将刷新该任务的各个选项卡,我想使用intent从外部类调用内部类,以便我可以从服务器刷新内部类。当我尝试使用intent从外部类调用内部类时,我遇到了类似ActivityNotfound exception的异常,但我已经在中提到了内部类解决后显示。我试了很多方法,但都没有成功 下面是我的班级结构 public class Fragment extends Sherl

我正在开发android应用程序,该应用程序的操作栏包含刷新按钮和溢出菜单,操作栏下方有两个堆叠的选项卡。当我单击“刷新”按钮时,将刷新该任务的各个选项卡,我想使用intent从外部类调用内部类,以便我可以从服务器刷新内部类。

当我尝试使用intent从外部类调用内部类时,我遇到了类似ActivityNotfound exception的异常,但我已经在中提到了内部类解决后显示。我试了很多方法,但都没有成功

下面是我的班级结构

public class Fragment extends SherlockFragmentActivity {
    ActionBar actionBar = getSupportActionBar();

    actionBar.setDisplayHomeAsUpEnabled(false);

    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

    Tab tab = actionBar.newTab().
            setText("Tab1").
            setTabListener(new Tab1())
            ;
    actionBar.addTab(tab);

    tab = actionBar.newTab().
            setText("Tab2").
            setTabListener(new Tab2())
            ;
    actionBar.addTab(tab);

    //I am tried number ways to refesh the particlar tab but not achieve my goal
    public void Refresh() {

        /* I am also write Refresh method on individual tab and call from 
        onOptionsItemSelected but not working*/

        Intent href = new Intent(Fragment.this,
                Tab1.class);  
        startActivity(href);
        finish();
    }
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {

        switch (item.getItemId()) {
        case R.id.menu_refresh:
            Refresh();
            return true;
        default:
            break;
        }
    }
    //inner class for tab first 
    public class Tab1 extends SherlockListFragment implements ActionBar.TabListener{

        // here implementating the TabListener method

        //here I am loading the list from server
        private class LoadProjects extends AsyncTask<String, String, String> {
            //call webservice
        }
    } 

    // inner class for tab second
    public class Tab2 extends SherlockListFragment implements ActionBar.TabListener{

        // here implementating the TabListener method

        //here I am loading the list from server

        private class LoadProjects extends AsyncTask<String, String, String> {
            //call webservice
        }
    } 
}
公共类片段扩展了SherlockFragmentActivity{
ActionBar ActionBar=getSupportActionBar();
actionBar.setDisplayHomeAsUpEnabled(false);
actionBar.setNavigationMode(actionBar.NAVIGATION\u MODE\u选项卡);
Tab=actionBar.newTab()。
setText(“Tab1”)。
SetTableListener(新选项卡1())
;
actionBar.addTab(tab);
tab=actionBar.newTab()。
setText(“Tab2”)。
SetTableListener(新选项卡2())
;
actionBar.addTab(tab);
//我尝试了很多方法来重新显示分词标签,但没有达到我的目标
公共无效刷新(){
/*我还在单个选项卡上编写刷新方法,并从
OnOptions项已选择但不工作*/
Intent href=新的Intent(Fragment.this,
表1.类别);
星触觉(href);
完成();
}
@凌驾
公共布尔值onOptionsItemSelected(菜单项项){
开关(item.getItemId()){
案例R.id.菜单\刷新:
刷新();
返回true;
违约:
打破
}
}
//tab-first的内部类
公共类Tab1扩展SherlockListFragment实现ActionBar.TablListener{
//在这里实现TabListener方法
//这里我正在从服务器加载列表
私有类LoadProjects扩展异步任务{
//呼叫网络服务
}
} 
//tab second的内部类
公共类Tab2扩展SherlockListFragment实现ActionBar.TablListener{
//在这里实现TabListener方法
//这里我正在从服务器加载列表
私有类LoadProjects扩展异步任务{
//呼叫网络服务
}
} 
}
androidmanifest.xml

<application>
        <activity
            android:name="com.ojaswitech.bookingscape.Fragment"
            android:configChanges="orientation|keyboardHidden"
            android:label=""
            android:logo="@drawable/action_bar_logo"
            android:theme="@style/Theme.New_theme_bs" >
        </activity>
        <activity
            android:name="com.ojaswitech.bookingscape.Fragment$Tab1"
            android:configChanges="orientation|keyboardHidden" >
        </activity>
        <activity
            android:name="com.ojaswitech.bookingscape.Fragment$Tab2"
            android:configChanges="orientation|keyboardHidden" />
    </application>

请任何人帮助我如何做上述任务。
提前感谢

您应该在新文件中将Tab1设置为公共类,而不是内部类。这将解决Refresh()方法“未找到活动”异常。

我可以问一下为什么要在这里使用
意图吗?我的意思是意图是用于启动或与活动通信的抽象/包装。一定要阅读这个概念,以便更好地了解片段如何与其宿主活动通信,反之亦然

在这种情况下,您可能需要在子片段中实现updateUI或refreshUI方法。单击刷新按钮,获取片段(按id或实例),并调用子对象的更新/刷新方法

有关详细信息,请参阅解决方案


快乐编码

您可以在
您的活动\u上下文的帮助下刷新片段。recreate()

Tab1类不是活动,而是片段。startActivity方法仅适用于活动。片段是在FragmentManager的帮助下显示的。@Herrmann您对此有什么解决方案吗?我已经做过类似的工作,如果您需要示例代码,请告诉我。我已经在这里发布了完整的代码。请检查一下。希望它会有帮助。这可能也会有帮助。我不明白从第一个链接是什么,我应该写在刷新方法()。哦!很抱歉第一个链接是给你一个片段的开始,你应该知道一些基本的东西。出于好奇,你是不是在用碎片做实验,比如这是你第一次在应用程序中使用碎片?根据您的回答,我可能会为您指出一个安全的地方。是的,您的回答是正确的,这是我第一次使用fragment。谢谢!请阅读我添加的片段介绍(第一个链接)。作为一名开发人员,您应该意识到这一点。小结:就像Herrmann建议的那样,片段需要一个主机
活动
才能存在。将片段视为活动的一部分/部分,它有自己的生命周期,接收它自己的输入事件,并且在活动运行时可以添加或删除。坦克斯和雷恩。