Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >切换制表符时重置片段回堆栈

切换制表符时重置片段回堆栈
EN

Stack Overflow用户
提问于 2014-07-05 12:14:24
回答 3查看 3.1K关注 0票数 2

现在我进入我的第一个问题,在互联网上找不到答案。通常情况下,这应该是一件非常容易的事情,但它花了我几个小时,所以请原谅我,如果这是一个初学者的问题。另外,我想确定我走的路是对的,然后再花更多的时间来看看,最终它不是我想要的,而是我实现它的方式-- atm。

问题:

我的应用程序有3个选项卡,3个片段作为内容,每个选项卡一个。我使用Tabs是因为我问的所有用户都想要Tabs,而不是导航抽屉,我听的是用户,而不是google (对不起)。另外,这三个选项卡有非常不同的“角色”(语言指南、货币转换器和自己的短语笔记本等等),这样划分它是有意义的(imo)。如果有人有其他的想法,那就去吧,我打开:-)

到目前为止,标签导航的工作原理是一样的。但现在我想为单张表建立进一步的导航,我不确定还能不能.这么简单的事情有很多种方法..。

第一个选项卡有一些imageButtons以进一步导航到本节(请参见Screen快照1),以便在语言部分中选择一个类别。当然,这意味着制表符应该保持在适当的位置,以便能够轻松地切换到转换器,也就是说,只需将制表符1中的片段切换到新的片段(请参阅屏幕快照2),依此类推。您在下面的屏幕截图中看到的按钮具有将当前片段更改为新片段的单击监听器(如“每日”)

为此,我打开另一个片段并将其添加到后台。也许你已经可以猜到现在发生了什么。如果我按下后退按钮,我当然会回到第一个片段。当在选项卡1上打开一个片段时,当我切换制表符时,问题就开始了。添加的片段仍然处于后台,这意味着如果我按下tab 2或3上的后退按钮,显示的内容会与其他片段的内容发生某种程度的混淆。见截图3

我是在这里出错了,还是在切换选项卡时,我可以简单地告诉后台“重置”,这样就不会出现这个问题了?

谢谢你的信息,很抱歉语言和拼写错误,英语不是我的主要语言。

Tablistener类以切换选项卡片段:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public  class MyTabListener implements ActionBar.TabListener {
Fragment fragment;

public MyTabListener(Fragment fragment) {
    this.fragment = fragment;
}

public void onTabSelected(ActionBar.Tab tab, FragmentTransaction ft) {
    ft.replace(R.id.fragment_container, fragment);
}

public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction ft) {
    ft.remove(fragment);
}

public void onTabReselected(ActionBar.Tab tab, FragmentTransaction ft) {
    // nothing done here
}

}

第一个片段中的片段类如下所示(不是完整代码):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public static class FragmentTab1 extends Fragment {
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
        final View view = inflater.inflate(R.layout.tab, container, false);

        ImageButton catBtn_Daily = (ImageButton) view.findViewById(R.id.catBtn_Daily);
        ImageButton catBtn_OnTheRoad = (ImageButton) view.findViewById(R.id.catBtn_OnTheRoad);
        ImageButton catBtn_Shopping = (ImageButton) view.findViewById(R.id.catBtn_Shopping);
        ImageButton catBtn_Restaurant = (ImageButton) view.findViewById(R.id.catBtn_Restaurant);
        ImageButton catBtn_Romance = (ImageButton) view.findViewById(R.id.catBtn_Romance);
        ImageButton catBtn_Emergency = (ImageButton) view.findViewById(R.id.catBtn_Emergency);


        // attach an OnClickListener
        catBtn_Daily.setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View v) {

                 // Create new fragment and transaction
                 Fragment newFragment = new FragmentTab4();

                 FragmentTransaction transaction = getFragmentManager().beginTransaction();

                 transaction.replace(R.id.fragment_container, newFragment);
                 transaction.addToBackStack(null);

                 transaction.setTransition(4097);
                 transaction.commit();
             }
        });

主要活动:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class MainActivity extends Activity {
ActionBar.Tab tab1, tab2, tab3;
Fragment fragmentTab1 = new FragmentTab1();
Fragment fragmentTab2 = new FragmentTab2();
Fragment fragmentTab3 = new FragmentTab3();

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_tab_test);

    ActionBar actionBar = getActionBar();
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

    tab1 = actionBar.newTab().setText("Home");
    tab2 = actionBar.newTab().setText("Calculator");
    tab3 = actionBar.newTab().setText("Notebook");

    tab1.setTabListener(new MyTabListener(fragmentTab1));
    tab2.setTabListener(new MyTabListener(fragmentTab2));
    tab3.setTabListener(new MyTabListener(fragmentTab3));

    actionBar.addTab(tab1);
    actionBar.addTab(tab2);
    actionBar.addTab(tab3);

还不能发照片,代表太低.

请看这里(第三张图片叫做无题-3.png)

屏幕1:https://www.dropbox.com/s/3av3pf6a17p2w42/Untitled-1.png

屏幕2:https://www.dropbox.com/s/3av3pf6a17p2w42/Untitled-2.png

屏幕3:https://www.dropbox.com/s/3av3pf6a17p2w42/Untitled-3.png

EN

回答 3

Stack Overflow用户

发布于 2014-07-05 12:35:11

最好不要使用片段回堆栈。您可以维护自己的堆栈并覆盖onBackPressed()以提供适当的行为。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Override protected void onBackPressed()
{
    if(myStack.isEmpty())
        super.onBackPressed(); // default handling finishes the activity
    else
    {
        FragmentTransaction transaction = getFragmentManager().beginTransaction();
        transaction.replace(R.id.fragment_container, myStack.pop());
        transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_CLOSE);
        transaction.commit();            
    }
}
票数 1
EN

Stack Overflow用户

发布于 2014-07-05 12:53:28

您可以尝试如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public void onTabSelected(YourTab tab) {
    Fragment fragment = new YourTabFragment();
    replaceRootFragment(fragment);
}

public void replaceRootFragment(Fragment fragment) {
    if (getSupportFragmentManager().getBackStackEntryCount() != 0) {
        int id = getSupportFragmentManager().getBackStackEntryAt(0).getId();
        try {
            getSupportFragmentManager().popBackStackImmediate(id, FragmentManager.POP_BACK_STACK_INCLUSIVE);
        } catch (IllegalStateException e) {
            return;
        }
    }
    getSupportFragmentManager().beginTransaction()
            .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE)
            .replace(R.id.container, fragment)
            .commit();
}

单击选项卡时调用onTabSelected。

票数 0
EN

Stack Overflow用户

发布于 2014-07-05 14:20:50

实际上,听起来你可能想考虑一种完全不同的方法。如果我的理解是正确的,您可能想考虑使用ViewPager和FragmentPagerAdapter (参见这里的google示例:FragmentPagerAdapter)。

从本质上说,viewpager显示了选项卡下面的片段,适配器提供了要显示的片段列表,您可以通过在viewpager上调用setCurrentItem来选择当前的“页面”(当用户单击一个选项卡时)。此外,用户还可以在页面之间滑动(您可以通过监听寻呼机事件来更新所选选项卡,参见google示例:ViewPager)。

这种方法避免了整个叠后问题,听起来更像是你想要的东西。

希望能帮上忙。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24590211

复制
相关文章
回滚/重置git merge
回滚失败 no -m option was given,这是因为merge是把两个分支合并到一起,回滚的话,就必须告诉git需要回滚到哪个个分支
十毛
2021/06/11
2.9K0
[Office] 设置制表符格式
设置制表符格式的目的是让段落中的文字设置多次对齐。实现以下的效果 先选中需要设置的段落,然后点击段落设置 设置的时候,根据Tab长度来设置 设置完成后在标尺上显示 之后,每次按
轻舞飞扬SR
2021/02/24
1.6K0
[Office] 设置制表符格式
Lua调用C++时打印堆栈信息
公司的手游项目,使用的是基于cocos2d-x绑lua的解决方案(参数quick-x的绑定),虽然使用了lua进行开发,更新很爽了,但是崩溃依然较为严重,从后台查看崩溃日志时,基本上只能靠“猜”来复现bug。更为郁闷的是很多时候并没有使用log输出,在崩溃日志里还无法查看大概在哪一步操作崩溃的…
meteoric
2018/11/20
2.9K0
SpringBoot详细打印启动时异常堆栈信息
SpringBoot在项目启动时如果遇到异常并不能友好的打印出具体的堆栈错误信息,我们只能查看到简单的错误消息,以致于并不能及时解决发生的问题,针对这个问题SpringBoot提供了故障分析仪的概念(failure-analyzer),内部根据不同类型的异常提供了一些实现,我们如果想自定义该怎么去做?
恒宇少年
2019/10/08
1.4K0
SpringBoot详细打印启动时异常堆栈信息
定位生产问题时,异常堆栈莫名丢了,何解?
今天分享的这个知识有点冷,相信很多 Java 程序员很少遇到,废话不多说,直接进入排查问题的真实讨论现场。
一猿小讲
2020/08/18
1.3K0
定位生产问题时,异常堆栈莫名丢了,何解?
制表符、换行
一个撇t等价于tab。但是在Java中,他会覆盖识别前面的4个占位符号:不足4个占位,后面会以数个空格代替使其整体占位4个,如果前面满足4个占位或0个占位,那么就往后面占位4个。更深层次的理解是:撇t识别前一位的所在的占位位置位数,使其位数%4 。因为新的撇t需要占位4个,要计算撇t占位几格,就需要再拿4减去余数就是占位的空格数,如果 余数是0 那么就向后面开辟4个空格占位,如果结果是几,就是空格的占位数了。
收心
2022/01/19
1.4K0
不重置小米手表达到双设备随时切换绑定
为什么突然想起来这个教程呢 因为我有2部手机 小米6和红米K20 Pro 在家使用的k20p,学校使用小米6 当时回家后想换绑到k20p,结果发现需要重置手表,数据都会丢失,这很难受啊 于是乎在群里面问了问, @凌峰岿然 给出了一个解决方案,现在已经成功了,在这里分享一下。 本教程适用于MIUI系统,其他系统未测试
KINDYEAR
2022/07/12
1.9K0
不重置小米手表达到双设备随时切换绑定
限制堆栈的堆栈排序
原文题目:Stack sorting with restricted stacks
Jarvis Cocker
2019/07/19
1.2K0
AIR切换SDK版本时遇到的问题
切换SDK,有时候会遇到这个问题。上面我使用的是sdk4.5,只需要修改应用程序的app.xml配置就可以正常运行air程序了。
meteoric
2018/11/16
7350
堆栈
堆栈(英语:stack)又称为栈或堆叠,是计算机科学中的一种抽象数据类型,只允许在有序的线性数据集合的一端(称为堆栈顶端,英语:top)进行加入数据(英语:push)和移除数据(英语:pop)的运算。因而按照后进先出(LIFO, Last In First Out)的原理运作。
王小明_HIT
2020/04/21
1.1K0
堆栈
回调函数Callback —从同步思维切换到异步思维
这是一种非常常见的直线性思维,我先请求网站拿到 html,然后我再把 html 传给负责处理的函数。在整个过程中,“我“担任着调度的角色。
王图思睿
2021/06/16
7940
java 堆栈的声明_Java 堆栈[通俗易懂]
堆栈是一种线性数据结构,用于存储对象的集合。它基于先进先出(LIFO)。 Java集合框架提供了许多接口和类来存储对象的集合。其中之一是Stack类,它提供了不同的操作,例如推,弹出,搜索等。
全栈程序员站长
2022/09/08
1.6K0
java 堆栈的声明_Java 堆栈[通俗易懂]
linux mysql重置密码_linux系统重置
大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。 Jetbrains全系列IDE稳定放心使用
全栈程序员站长
2022/11/04
6.2K0
iOS导航栏切换界面时隐藏和显示
现如今很多App的一些模块,尤其是个人中心模块,界面设计已经习惯于不保留导航栏,而是直接将界面背景覆盖到状态栏,比如QQ的个人信息界面:
Cloudox
2021/11/23
3.9K0
iOS导航栏切换界面时隐藏和显示
【干货】VPS故障时自动切换IP的方法
监控某个网站(比如定时ping),当发现故障时执行此脚本修改域名的A记录指向备份网站的IP地址,实现故障自动切换
wo.
2021/06/15
2.5K0
【干货】VPS故障时自动切换IP的方法
前端实现多语言切换_等红灯时频繁D到N档切换
https://stackoverflow.com/questions/40398528/android-webview-language-changes-abruptly-on-android-n
全栈程序员站长
2022/10/02
5190
前端实现多语言切换_等红灯时频繁D到N档切换
优秀代码摘录片段一:LinkedList中定位index时使用折半思想
在LinkedList有一段小代码,实现的功能是,在链表中间进行插如,所以在插如的过程中会需要找到对应的index位置的node元素;
小勇DW3
2018/09/29
5340
Kali远程桌面Windows时出现"连接被对端重置"错误
ERROR: rdp.c:140: rdp_recv(), unexpected stream overrun0000 03 00 00 1e 02 f0 80 68 00 01 03 eb 70 10 08 00 .......h....p... 0010 02 03 83 89 43 9f f8 48 33 7e 04 00 16 00 ....C..H3~....
菜菜有点菜
2022/03/16
2.9K0
Kali远程桌面Windows时出现"连接被对端重置"错误
点击加载更多

相似问题

切换片段时导航重置

10

构建片段回堆栈

12

切换制表符时,片段有时会重叠。

10

扩展AppCompatActivity时,片段回堆栈无法工作

33

根据当前片段处理片段回堆栈

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文