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

How to change a TextView Fragment by a button located on the ActionBar (In the main fragment)

我有一个主要的 FragmentActivity(InfoInstalacionDetailsCollection extends FragmentActivity implements ViewPager.OnPageChangeListener)和 ViewPager。

当viewPager在4号Fragment(public class 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;
}

非常感谢!

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

保存引用的方式取决于 ViewPager 所在的位置。如果它在 activity 中,则在 activity 中创建一个字段并将新的 InfoInstalacionFragment4 分配给它。

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

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