【问题标题】:How to change a TextView Fragment by a button located on the ActionBar (In the main fragment)如何通过位于 ActionBar 上的按钮更改 TextView 片段(在主片段中)
【发布时间】:2015-04-15 22:33:31
【问题描述】:

我有一个带有 ViewPager 的主要 FragmentActivity(InfoInstalacionDetailsCollection 扩展了 FragmentActivity 实现 ViewPager.OnPageChangeListener)。

viewPager在4号Fragment(公共类InfoInstalacionFragment4扩展Fragment)时,ActionBar上会出现一个按钮(R.id.info_instalacion_details_collection_actionbar_menu_btn_buscar)。通过单击按钮,我希望当前 Fragment(编号 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;
}

非常感谢!

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-01-23
      • 2013-05-21
      • 1970-01-01
      • 2013-04-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多