0

조각과 ViewPager 인 탭이있는 ActionBar가 있습니다. MainActivity에는 LocationListener가 구현되어 있습니다.안드로이드는 액티비티의 데이터를 그의 프래그먼트 (viewpager)로 전달합니다.

어떻게 MainActivity에서 위치 데이터를 조각으로 전달할 수 있습니까?

MainActivity :

public class MainActivity extends FragmentActivity implements ActionBar.TabListener, LocationListener{ 

ActionBar actionbar; 
ViewPager viewpager; 
FragmentPageAdapter ft; 
public String str="STRING"; 

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

    final RunFragment fragment = (RunFragment) ft.getItem(viewpager.getCurrentItem()); 
    fragment.setTv(str); 

    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() { 

     @Override 
     public void onPageSelected(int arg0) { 
     actionbar.setSelectedNavigationItem(arg0); 

     } 

     @Override 
     public void onPageScrolled(int arg0, float arg1, int arg2) { 
      // TODO Auto-generated method stub 

     } 

     @Override 
     public void onPageScrollStateChanged(int arg0) { 
      // TODO Auto-generated method stub 

     } 
    }); 


} 

나는 setTv() 메소드에있는 탭의 코드 위치 데이터를 기록 할 :

public class RunFragment extends Fragment { 

public TextView tv; 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 

    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

[확인] (http://developer.android.com/training/basics/fragments/communicating.html) – Skynet

+0

데이터를 저장할 번들을 첨부 할 수 있습니다. – EagleEye

+0

어떤 문제가 있습니까? 또한 ViewPager에 어댑터를 설정 한 후에'fragment.setTv (str);'을 호출하십시오. onPageSelected 메소드에서 첫 번째 조각을 선택할 때'onPageSelected' 메서드가 호출되기 때문에'onPageSelected' 메서드에서'fragment.setTv (str);을 사용하십시오 –

답변

0

활동에서 당신이 의도로 데이터를 전송을 예 :

bundle.putString("edttext", "From Activity"); 
Fragmentclass fragobj = new Fragmentclass(); 
fragobj.setArguments(bundle); 

및 조각 onCreateView 방법으로는 : 유

// map is a GoogleMap object 
map.setMyLocationEnabled(true); 

체크 this link

+0

onCreateView는 한 번만 실행되지만 위치 데이터는 매 초마다 변경됩니다. 어떻게 이러한 변경된 데이터도 전달할 수 있습니까? – kalmi

+0

@kalmi : 위치 업데이트를 지속적으로 전달하지 않아야합니다. – kevz

+0

나는 어디에 있는지 알고 싶기 때문에 실시간으로 데이터를 전달해야한다. – kalmi

0

당신은 Greenrobot EventBus 같은 이벤트 버스 라이브러리를 사용하는 것이 좋습니다. 이 기능을 사용하면 필요할 때마다 활동의 이벤트 객체를 보낼 수 있고, 조각은 살아있을 때만 해당 이벤트 객체를받습니다.

1

처럼 smthing 할 수

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

고마워,이 사람 !! 쉽게 구현할 수있는 문서로 활동과 단편 간의 의사 소통을 처리하는 가장 깨끗하고 효과적인 방법 !! Upvote !! –

+0

OP 만 체크 아웃했다면! 방금 사용 했어! –

관련 문제