我有一个主要的FragmentActivity(InfoInstalacionDetailsCollection使用ViewPager扩展FragmentActivity实现ViewPager.OnPageChangeListener)。
当viewPager位于片段编号4(公共类InfoInstalacionFragment4 extends Fragment)时,ActionBar上会出现一个按钮(R.id.info_instalacion_details_collection_actionbar_menu_btn_buscar)。通过单击按钮,我想要更改当前片段(编号4)的TextView值。
我该怎么做?
这是我的代码:
在InfoInstalacionDetailsCollection中。 onCreat方法我宣布ActionBar:
actionBar = new ActionBarImplementation(this, this, R.string.app_name, OPCION_MENU);
然后:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.info_instalacion_details_collection_actionbar_menu, menu);
MenuItem btnVeranoInvierno = menu.findItem(R.id.info_instalacion_details_collection_actionbar_menu_btn_buscar);
btnVeranoInvierno.setVisible(false);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == android.R.id.home) {
Intent intent = new Intent(this, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
return true;
}
if(item.getItemId()== R.id.info_instalacion_details_collection_actionbar_menu_btn_buscar){
Log.d("Page", "InfoInstalacionFragment4. Verano: ");
}
return true;
}
//Menu de ActionBar
public boolean onPrepareOptionsMenu(Menu menu) {
int pageNum = mViewPager.getCurrentItem();
Log.e("Page", "InfoInstalacionDetailsCollection. onPrepareOptionsMenu. pagina actual: "+pageNum);
if(pageNum== 3){
MenuItem btnVeranoInvierno = menu.findItem(R.id.info_instalacion_details_collection_actionbar_menu_btn_buscar).setVisible(true);
btnVeranoInvierno.setVisible(true);
Log.e("Page", "InfoInstalacionDetailsCollection. onPrepareOptionsMenu. pagina actual: "+pageNum);
}else{
menu.findItem(R.id.info_instalacion_details_collection_actionbar_menu_btn_buscar).setVisible(false);
Log.e("Page", "InfoInstalacionDetailsCollection. onPrepareOptionsMenu. pagina actual: "+pageNum);
}
return super.onPrepareOptionsMenu(menu);
}
@Override
public void onPageScrollStateChanged(int arg0) {
// TODO Auto-generated method stub
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
// TODO Auto-generated method stub
}
@Override
public void onPageSelected(int pageNum) {
// TODO Auto-generated method stub
invalidateOptionsMenu();//Llama al metodo del sistema onPrepareOptionsMenu()
}
这是我的代码InfoInstalacionFragment4(onCreateView方法)
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// TODO Auto-generated method stub
//Creamos la View
View view = inflater.inflate(R.layout.infoinstalacion_fragment4, container, false);
tv_titulo = (TextView) view.findViewById(R.id.infoinstalacion_fragment4_tv_titulo);
tv_subtitulo = (TextView) view.findViewById(R.id.infoinstalacion_fragment4_tv_subtitulo);
tv_horariosEspeciales = (TextView) view.findViewById(R.id.infoinstalacion_fragment4_tv_horarios_especiales);
tv_diasDeCierre = (TextView) view.findViewById(R.id.infoinstalacion_fragment4_tv_dias_de_cierre);
tv_lunesViernesHora = (TextView) view.findViewById(R.id.infoinstalacion_fragment4_tv_lunes_viernes_hora);
tv_sabadosHora = (TextView) view.findViewById(R.id.infoinstalacion_fragment4_tv_sabados_hora);
tv_domingosHora = (TextView) view.findViewById(R.id.infoinstalacion_fragment4_tv_domingos_hora);
tv_festivosHora = (TextView) view.findViewById(R.id.infoinstalacion_fragment4_tv_festivos_hora);
tv_horariosEspeciales.setOnClickListener(this);
tv_diasDeCierre.setOnClickListener(this);
if(summer){
tv_titulo.setText(R.string.horario_de_verano);
tv_subtitulo.setText(R.string.del_14_de_junio_al_31_de_agosto);
tv_lunesViernesHora.setText(verHorarioLunVie);
tv_sabadosHora.setText(verHorarioSab);
tv_domingosHora.setText(verHorarioDom);
tv_festivosHora.setText(verHorarioFest);
}else{
tv_titulo.setText(R.string.horario_de_invierno);
tv_subtitulo.setText(R.string.del_1_de_septiembre_al_13_de_junio);
tv_lunesViernesHora.setText(invHorarioLunVie);
tv_sabadosHora.setText(invHorarioSab);
tv_domingosHora.setText(invHorarioDom);
tv_festivosHora.setText(invHorarioFest);
}
return view;
}
非常感谢你!
答案 0 :(得分:1)
您需要在活动中的寻呼机中保留您正在使用的InfoInstalacionFragment4
实例的引用,以便在用户按下菜单项时可以访问它。
保留引用的方式取决于ViewPager的位置。如果它在活动中,请在活动中创建一个字段,并为其分配新的InfoInstalacionFragment4
。
在InfoInstalacionFragment4中,您可以添加一个方法,例如public void changeTextViews()
。
当用户按下菜单时,您在InfoInstalacionFragment4的实例上调用该方法。