dra*_*ust 4 android android-viewpager
我有Viewpager机智2片段:CurrentWeatherFragment和ForecastFragment.我需要将字符串从一个传递到另一个,Iam使用如下所示的界面,但我一直得到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");
}
}
}
Run Code Online (Sandbox Code Playgroud)
MainActivity.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);
}
}
Run Code Online (Sandbox Code Playgroud)
ForecastFragment.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);
}
}
Run Code Online (Sandbox Code Playgroud)
我在其他应用程序中成功使用了这种方法,我在一个活动中有2个片段,我可以通过ID调用它们
public void sendData(String message) {
SecondFragment f2 = (SecondFragment)getFragmentManager().findFragmentById(R.id.F2);
f2.getData(message);
}
Run Code Online (Sandbox Code Playgroud)
但是这里片段没有ID,我认为该消息没有传递,因为我不使用FragmentManager(),但如何在没有ID的任何建议/想法的viewpager中找到片段?
小智 5
虽然有点hacky你可以做的是通过使用以下代码获取片段的标签:
String tag = "android:switcher:" + R.id.pager + ":" + index;
Fragment f = getSupportFragmentManager().findFragmentByTag(tag);
Run Code Online (Sandbox Code Playgroud)
其中R.id.pager是布局中viewpager的id,index是Viewpager Adapter中的位置(作为整数).我不能说这会永远有效,但它现在对我有用.
替代方案我建议使用LocalBroadcastManager和BroadcastReciver在您的片段之间内部发送数据,因为虽然它有一点工作,它有助于摆脱意大利面条代码情况,您可能最终发现自己试图直接引用片段.
| 归档时间: |
|
| 查看次数: |
12859 次 |
| 最近记录: |