gpt4 book ai didi

android - 在 viewpager 中的 fragment 之间传递数据

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:03:29 25 4
gpt4 key购买 nike

我有 Viewpager 机智 2 个 fragment :CurrentWeatherFragmentForecastFragment。我需要将字符串从一个传递到另一个,我正在使用如下所示的界面,但我不断收到 NullPointerException,消息未正确传递...

public class CurrentWeatherFragment extends Fragment {

SendMessage SM

public void onCreateView(...) {
String Message = "Hello"
SM.sendData(Message);
}

interface SendMessage
{
public void sendData(String message);
}

@Override
public void onAttach(Activity activity) {
super.onAttach(activity);

try {
SM = (SendMessage) activity;
} catch(ClassCastException e) {
throw new ClassCastException("Musisz zaimplementowac metode sendData");
}
}
}

主 Activity .java

import android.support.v4.app.FragmentActivity;
import android.support.v4.view.ViewPager;
import android.os.Bundle;


public class MainActivity extends FragmentActivity implements CurrentWeatherFragment.SendMessage {

ViewPager viewPager;


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

//setting fragment view pager
viewPager = (ViewPager)findViewById(R.id.pager);
PagerAdapter pagerAdapter = new PagerAdapter(getSupportFragmentManager());
viewPager.setAdapter(pagerAdapter);
}

public void sendData (String message){
ForecastFragment FF = new ForecastFragment();
FF.getData(message);
}

}

预测 fragment .java

public class ForecastFragment extends Fragment {

public View onCreateView(){
TextView txt = (TextView)v.findViewById(R.id.txt_forecast);
}

public void getData(String message){
txt.setText(message);
}
}

我已经在其他应用程序中成功使用了这个方法,我在一个 Activity 中有 2 个 fragment ,我可以通过 ID 调用它们

public void sendData(String message) {

SecondFragment f2 = (SecondFragment)getFragmentManager().findFragmentById(R.id.F2);
f2.getData(message);
}

但这里的 Fragments 没有 ID,我认为消息没有传递,因为我没有使用 FragmentManager(),但是如何在没有 ID 的 viewpager 中找到 fragment ,有什么建议/想法吗?

最佳答案

虽然有点 hacky,但您可以使用以下代码通过标签获取 fragment :

String tag = "android:switcher:" + R.id.pager + ":" + index;
Fragment f = getSupportFragmentManager().findFragmentByTag(tag);

其中 R.id.pager 是布局中 viewpager 的 ID,index 是 Viewpager 适配器中的位置(作为整数)。我不能说这会永远有效,但目前对我有效。

我建议的替代方案是使用 LocalBroadcastManager 和 BroadcastReciver 在您的 fragment 之间发送内部数据,尽管它需要做更多的工作,但它有助于摆脱意大利面条代码的情况,您最终可能会发现自己在尝试引用 fragment 直接。

关于android - 在 viewpager 中的 fragment 之间传递数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29731038/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com