当前位置: 首页 > 知识库问答 >
问题:

滑动布局选项卡之间的通信

段劲
2023-03-14

我已经搜索了很多关于如何使用SlidengTablayout在片段之间进行通信的内容,但还没有找到一个好的答案。我知道使用ActionBar,但我想要的是androidLollipop使用SlidingTabLayout的新方式。我试过了-

共有3个答案

谷善
2023-03-14

使用EventBus GitHub库这是目前最简单方便的方式https://github.com/greenrobot/EventBus

艾望
2023-03-14

滑动选项卡(ViewPager)时,可以使用相同的片段,也可以使用不同的片段

正如您之前提到的,您已经尝试过了,所以我将使用不同的Fragments

您要做的基本上是使用EventBus:https://github.com/greenrobot/EventBus.

将其添加到您的构建中。gradle依赖项位于app文件夹中。

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:22.1.1'
    compile 'de.greenrobot:eventbus:2.4.0'   
}

您还可以通过使用意图来实现它。

public class TextChangedEvent {
  public String newText;
  public TextChangedEvent(String newText) {
      this.newText = newText;
  }
}
//when text changes
EventBus bus = EventBus.getDefault();
bus.post(new TextChangedEvent(newText));    
EventBus bus = EventBus.getDefault();

//Register to EventBus
@Override
public void onCreate(SavedInstanceState savedState) {
 bus.register(this);
}

//catch Event from fragment A
public void onEvent(TextChangedEvent event) {
 yourTextView.setText(event.newText);
}

资料来源:https://stackoverflow.com/a/20475430/1549700

唐烨煜
2023-03-14

最干净的方法是定义一个接口,包含片段s的活动将实现这个接口。这是我最近解决这个问题的方法:

首先在它自己的文件中定义接口,因为它必须对其他类可见。

public interface FragmentCommunication
{
    public void printMessage(String message);
    //....    
}

活动中需要实现此接口

public class MainActivity extends ActionBarActivity implements FragmentCommunication
{   
    //....
    public void printMessage(String message)
    {
        System.out.println(message);
    }
}

最后,在片段中,您可以使用getActivity()获得托管活动,要使用通信方法,只需将活动转换为实现的通信界面,如下所示:

((FragmentCommunication) getActivity()).printMessage("Hello from Fragment!");

编辑:要进一步将消息传递给其他片段s,请这样做:因为您的选项卡都扩展了片段,所以最好创建另一个接口

public Interface ReceiverInterface
{
    public void receiveMessage(String str);
}

然后在你的标签中实现这一点

public class Tab1 extends Fragment implements ReceiverInterface
{
   // .... code .....
    public void receiveString(String str)
    {
        //use str
    }
}

要进一步将此消息发送到其他片段,需要活动看到它们。例如,现在修改printMessage()活动对此实现

    public void printMessage(String message)
    {
        System.out.println(message);
        //Send the message that came from one fragment to another
        if (tabFragment1 instanceof ReceiverInterface){
            ((ReceiverInterface) tabFragment1).receiveMessage(message);
        }
    } 
 类似资料:
  • 我想创建一个应用程序,使用带有滑动视图的选项卡布局(类似于这样): 问题来了:我在网上到处找一个可以解释如何做这种事情的指南,但我所做的一切都对我不起作用。我在某个地方读到标签布局与Lollipop是不推荐的,所以我试图找到一个替代的方法来做我想做的事情,但什么也没有。我试图创建的每个选项卡布局应用程序在测试时都以崩溃告终,我认为这是由于的某些原因,总是因为选项卡在Lollipop中是不推荐的。我

  • 嗨,我在我的应用程序中使用了滑动选项卡布局,一切都很好。我唯一不明白的是为什么我的标签文本是大写的。 我已经打印了选项卡在滑动选项卡类中获得的文本,它们不是大写的。我环顾四周,没有调用toUpperCase方法。 下面是设置文本的类的代码: 我确信我可以通过一种风格做到这一点,但真的不确定使用哪一种。这是我的风格:

  • 页边距在它们之间的选项卡和选定的选项卡上有一个勾号

  • 我正在寻找一种方法,如何在浏览器中的多个选项卡或窗口之间进行通信(在同一个域上,而不是CORS上)而不留下痕迹。有几种解决办法: 使用窗口对象 邮件后传 Cookies 本地存储 第一种可能是最糟糕的解决方案--你需要从你当前的窗口打开一个窗口,然后你只能在保持窗口打开的情况下进行交流。如果您在任何窗口中重新加载该页,则很可能会丢失通信。 第二种方法,使用postMessage,可能可以实现跨源通

  • 自定义选项卡选择效果,包括:点击tab产生高光效果,tab下面的横条滑动到选择的tab,对应的视图也进行滑动显示。 [Code4App.com]

  • 我是Android新手,因此面临这样的问题。 fragment_main: 所以我需要这些标签有不同内容的网格布局。