我已经搜索了很多关于如何使用SlidengTablayout在片段之间进行通信的内容,但还没有找到一个好的答案。我知道使用ActionBar,但我想要的是androidLollipop使用SlidingTabLayout的新方式。我试过了-
使用EventBus GitHub库这是目前最简单方便的方式https://github.com/greenrobot/EventBus
滑动选项卡(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
最干净的方法是定义一个接口,包含片段
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: 所以我需要这些标签有不同内容的网格布局。