2015-01-15 1 views
0

У меня есть ActionBar, и у него есть вкладки. В MainActivity реализована функция LocationListener.Как Android Activity может передать значение координаты фрагменту?

В методе onLocationChanged (Location location) Я сохраняю значение долготы в double longitude.

Я хотел бы передать это значение классу RunFragment.

Может ли кто-нибудь мне помочь?

Это код MainActivity:

общественный класс MainActivity расширяет FragmentActivity реализует ActionBar.TabListener, LocationListener {

ActionBar actionbar; 
ViewPager viewpager; 
FragmentPageAdapter ft; 

double longitude; 

private LocationManager lm; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    viewpager = (ViewPager) findViewById(R.id.pager); 
    ft = new FragmentPageAdapter(getSupportFragmentManager()); 

    actionbar = getActionBar(); 
    viewpager.setAdapter(ft); 
    actionbar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 
    actionbar.addTab(actionbar.newTab().setText("Run").setTabListener(this)); 
    actionbar.addTab(actionbar.newTab().setText("Map").setTabListener(this)); 
    actionbar.addTab(actionbar.newTab().setText("Statistics").setTabListener(this)); 
    viewpager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {    

    }); 


protected void startLocationUpdate() { 
    LocationManager lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
    lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this); 
} 


public void onLocationChanged(Location location) { 
    longitude=location.getLongitude(); 

}

Это код RunFragment:

общественного класса RunFragment extends Fragment {

TextView tv; 


@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    View view = inflater.inflate(R.layout.run_layout, container, false); 
    tv =(TextView)view.findViewById(R.id.textView1); 

    return view; 

} 


public void setTv(String string){ 
    tv.setText(string); 
} 

}

ответ

0

Вы можете не получить ссылку на RunFragment на операцию через findViewById()? Затем добавьте метод RunFragment и вызовите его с onLocationChanged().

+0

Я не знаю, как можно получить ссылку. Не могли бы вы записать его? – kalmi

1

От активности вы отправляете данные с целью, как:

Bundle bundle = new Bundle();<br/> 
    bundle.putString("edttext", "From Activity");<br/> 
    // set Fragmentclass Arguments<br/> 
    Fragmentclass fragobj = new Fragmentclass();<br/> 
    fragobj.setArguments(bundle);<br/><br/> 

В Фрагмент метода onCreateView:

@Override<br/> 
    public View onCreateView(LayoutInflater inflater, ViewGroup container,<br/> 
     Bundle savedInstanceState) {<br/> 
    String strtext = getArguments().getString("edttext"); <br/> 
    return inflater.inflate(R.layout.fragment, container, false);<br/> 
    } 
+0

Могу ли я посылать Intents everx seconds? Причина: местоположение меняется в каждой секунде, но onCreateView запускает только один. – kalmi

+0

В вашем сценарии почти разумно, чтобы какая-то форма широковещательного приемника прослушивала изменения местоположения, а затем соответствующим образом реагировала на вызванный фрагмент. Поскольку однократное заполнение и выключение фрагмента, для изменения значений местоположения, оно не поможет вам. –