我目前有一个包含两个微调器的片段,我想将两个微调器的信息发送到MainActivity。这可能吗?虽然我的代码在我从一个微调器发送信息时起作用,但只要我尝试从两个微调器发送信息(如下所示),就不会传输任何信息:
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
try {
onNumberInPartyListener = (onNumberInPartyListener) activity;
onMethodOfSplitListener = (onMethodOfSplitListener) activity;
}
catch (Exception ex){}
}
我是否需要创建两个onAttach方法,两个片段还是另一种方式?
由于
更新
所以我最终取消了上面的内容,而是使用了一个'接口' java类将片段1中的信息发送到主活动,但是现在我在将主要活动信息发送到片段2时遇到问题。
在我的主要活动中,我使用以下代码将信息发送到片段2(其中' evenSplit_CalculationFragment2'是片段2和' tellMeWhatEachPersonOwesES是我的方法' ve在片段2中实现:
//Send data to Even Split Fragment 2
evenSplit_CalculationFragment2.tellMeWhatEachPersonOwesES(eachPersonOwesESString);
在片段2中,我实现了以下内容:
//What Each Person Owes (from Main Activity)
public void tellMeWhatEachPersonOwesES (String eachPersonOwesThisESString) {
amountEachPersonOwesES.setText(eachPersonOwesThisESString);
}
但是,我为这两者提出了空指针异常。我试过通过替换“eachPersonOwesThisESString'用一个实际的字符串(例如" test")但是大多数人都感到困惑,我仍然得到一个空指针异常。任何帮助表示赞赏。
答案 0 :(得分:0)
您应该使用Handler
ptrdiff_t
您可以使用一个具有不同h = new Handler() {
public void handleMessage(android.os.Message msg) {
// Getting data from Handler
tvInfo.setText("Data from Spinner1: " + msg.what);
if (msg.what == 10)
// do what you need
};
};
代码的处理程序来区分它们。在活动中初始化并发送到片段,当您编写msg.what
答案 1 :(得分:0)
如果我想解决这个问题,我要做的就是使用事件总线(尽管如果你真的想要,你可以在技术上使用带有Parcelables的LocalBroadcastManager)。
使用Otto事件总线,它看起来像这样
public enum SingletonBus {
INSTANCE;
private Bus bus;
private Handler handler = new Handler(Looper.getMainLooper());
private SingletonBus() {
this.bus = new Bus(ThreadEnforcer.ANY);
}
public <T> void postToSameThread(final T event) {
bus.post(event);
}
public <T> void postToMainThread(final T event) {
handler.post(new Runnable() {
@Override
public void run() {
bus.post(event);
}
});
}
public <T> void register(T subscriber) {
bus.register(subscriber);
}
public <T> void unregister(T subscriber) {
bus.unregister(subscriber);
}
}
public class YourFragment extends android.support.v4.Fragment {
public static class SpinnersSelectedEvent {
public String firstSpinnerData;
public String secondSpinnerData;
public SpinnersSelectedEvent(String firstSpinnerData, String secondSpinnerData) {
this.firstSpinnerData = firstSpinnerData;
this.secondSpinnerData = secondSpinnerData;
}
}
@OnClick(R.id.yourfragment_thebutton)
public void theButtonClicked() {
SingletonBus.INSTANCE.postToSameThread(new SpinnersSelectedEvent(firstSpinner.getSelectedItem(), secondSpinner.getSelectedItem()); //pseudo code on the spinner part
}
}
public class MainActivity extends AppCompatActivity {
public void onCreate(Bundle saveInstanceState) {
super.onCreate(saveInstanceState);
//...
SingletonBus.INSTANCE.register(this);
}
public void onDestroy() {
super.onDestroy();
SingletonBus.INSTANCE.unregister(this);
}
@Subscribe
public void onSpinnersSelectedEvent(YourFragment.SpinnersSelectedEvent e) {
String firstData = e.firstSpinnerData;
String secondData = e.secondSpinnerData;
// do things
}
}