如何通过位于ActionBar上的按钮更改TextView片段(在主片段中)

时间:2015-04-15 22:33:31

标签: android android-fragments android-actionbar android-viewpager

我有一个主要的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;
}
非常感谢你!

1 个答案:

答案 0 :(得分:1)

您需要在活动中的寻呼机中保留您正在使用的InfoInstalacionFragment4实例的引用,以便在用户按下菜单项时可以访问它。

保留引用的方式取决于ViewPager的位置。如果它在活动中,请在活动中创建一个字段,并为其分配新的InfoInstalacionFragment4

在InfoInstalacionFragment4中,您可以添加一个方法,例如public void changeTextViews()

当用户按下菜单时,您在InfoInstalacionFragment4的实例上调用该方法。