Mi aplicación (nivel mínimo 13) es una actividad que utiliza pestañas en la barra de acciones para administrar un par de fragmentos, muy similar a this.Textviews en un diseño de Fragmento no cambian al llamar a SetText()
Ahora, la actividad inicia un servicio que realiza cálculos continuos y devuelve valores que me gustaría mostrar en los Fragmentos. La actividad - La comunicación del servicio se implementa a través de receptores de difusión y la actividad mezcla los datos en el Fragmento apropiado.
Todo parece estar configurado correctamente y los datos llegan al método de actualización del Fragmento, pero cuando trato de mostrar los nuevos valores en textviews, los nuevos valores nunca se muestran.
El código para cambiar las textviews:
TextView tv = (TextView) getView().findViewById(R.id.fieldNavGpsTime);
Double doub = input.getDoubleExtra("com.some.thing.GPS_TIME", -1.0);
tv.setText(doub.toString());
El código para llamar a los métodos de actualización fragmentos del receptor de radiodifusión en la Actividad:
NavigationGuiFragment navfrag = (NavigationGuiFragment) getFragmentManager().findFragmentByTag("navigation");
if (navfrag != null && navfrag.isResumed())
navfrag.UpdateNavUI(intent);
me he dado cuenta de que isVisible() doesn Parece que nunca es cierto, pero no estoy seguro de lo que significa o cómo cambiarlo.
Además, parece que no puedo agregar una vista de imagen a un fragmento mediante programación. Aquí está el código (que reside en onActivityCreated()):
this.compass = new BasicCompass(getActivity());
LinearLayout ll = (LinearLayout) getView().findViewById(R.id.nav_hrztl_lnly);
ll.addView(this.compass);
El constructor BasicCompass tiene un contexto, la verdad es que no estoy completamente seguro de lo que estoy pasando es correcta.
El código para esto se tomó más o menos de una Actividad de trabajo y se colocó en un Fragmento para permitir las pestañas. Estoy abierto a la sugerencia con respecto a cambiar la estructura del código.
Gracias por cualquier ayuda.
EDITAR
El diseño xml del fragmento:
<?xml version="1.0" encoding="UTF-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/nav_hrztl_lnly"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="horizontal"
android:focusable="true"
android:focusableInTouchMode="true"
android:baselineAligned="false" >
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="600dp"
android:layout_height="fill_parent"
android:orientation="vertical"
android:focusable="true"
android:focusableInTouchMode="true" >
<EditText
android:id="@+id/labelNavGpsTime"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/gps_time" />
<EditText
android:id="@+id/fieldNavGpsTime"
style="@style/field_padding"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/zero_3_digits"
android:inputType="numberDecimal" />
<EditText
android:id="@+id/labelNavLatitude"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/latitude" />
<EditText
android:id="@+id/fieldNavLatitude"
style="@style/field_padding"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/zero_6_digits"
android:inputType="numberDecimal" />
<EditText
android:id="@+id/labelNavLongitude"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/longitude" />
<EditText
android:id="@+id/fieldNavLongitude"
style="@style/field_padding"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/zero_6_digits"
android:inputType="numberDecimal" />
<EditText
android:id="@+id/labelNavAltitude"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/altitude" />
<EditText
android:id="@+id/fieldNavAltitude"
style="@style/field_padding"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/zero_3_digits"
android:inputType="numberDecimal" />
<EditText
android:id="@+id/labelNavRoll"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/roll" />
<EditText
android:id="@+id/fieldNavRoll"
style="@style/field_padding"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/zero_6_digits"
android:inputType="numberDecimal" />
<EditText
android:id="@+id/labelNavPitch"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/pitch" />
<EditText
android:id="@+id/fieldNavPitch"
style="@style/field_padding"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/zero_6_digits"
android:inputType="numberDecimal" />
<EditText
android:id="@+id/labelNavAzimuth"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/azimuth_heading" />
<EditText
android:id="@+id/fieldNavAzimuth"
style="@style/field_padding"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/zero_6_digits"
android:inputType="numberDecimal" />
<LinearLayout
android:id="@+id/nav_rdbtn_lnly"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<RadioButton
android:id="@+id/rdbtnNavGpsAvailability"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/gps_avail" />
<RadioButton
android:id="@+id/rdbtnNavZuptStatus"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/zupt_stat" />
</LinearLayout>
</LinearLayout>
y el fragmento que lo utiliza:
public class NavigationGuiFragment extends Fragment
{
private RadioButton gpsRdBtn;
private RadioButton zuptRdBtn;
private BasicCompass compass;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
View fragview = inflater.inflate(R.layout.navigation_fragment, container, false);
// sets up the rose image that serves as a compass in the GUI
this.compass = new BasicCompass(getActivity());
LinearLayout ll = (LinearLayout) fragview.findViewById(R.id.nav_hrztl_lnly);
ll.addView(this.compass);
return fragview;
}
@Override
public void onActivityCreated(Bundle savedInstanceState)
{
super.onActivityCreated(savedInstanceState);
getActivity().setContentView(R.layout.navigation_fragment);
//Initialize the radio buttons
gpsRdBtn = (RadioButton) getView().findViewById(R.id.rdbtnNavGpsAvailability);
gpsRdBtn.setChecked(false);
zuptRdBtn = (RadioButton) getView().findViewById(R.id.rdbtnNavZuptStatus);
zuptRdBtn.setChecked(false);
}
@Override
public void onResume()
{
super.onResume();
if (!IsMyServiceRunning())
{
gpsRdBtn.setChecked(false);
zuptRdBtn.setChecked(false);
}
}
public void UpdateNavUI(Intent input)
{
TextView tv = (TextView) getView().findViewById(R.id.fieldNavGpsTime);
Double doub = input.getDoubleExtra("com.some.thing.GPS_TIME", -1.0);
tv.setText(doub.toString());
tv = (TextView) getView().findViewById(R.id.fieldNavLatitude);
doub = input.getDoubleExtra("com.some.thing.LATITUDE", 100000.0);
tv.setText(doub.toString());
tv = (TextView) getView().findViewById(R.id.fieldNavLongitude);
doub = input.getDoubleExtra("com.some.thing.LONGITUDE", 100000.0);
tv.setText(doub.toString());
tv = (TextView) getView().findViewById(R.id.fieldNavAltitude);
doub = input.getDoubleExtra("com.some.thing.ALTITUDE", -1.0);
tv.setText(doub.toString());
tv = (TextView) getView().findViewById(R.id.fieldNavRoll);
doub = input.getDoubleExtra("com.some.androidndk.ROLL", 361.0);
tv.setText(doub.toString());
tv = (TextView) getView().findViewById(R.id.fieldNavPitch);
doub = input.getDoubleExtra("com.some.thing.PITCH", 361.0);
tv.setText(doub.toString());
tv = (TextView) getView().findViewById(R.id.fieldNavAzimuth);
doub = input.getDoubleExtra("com.some.thing.AZIMUTH", 361.0);
tv.setText(doub.toString());
this.compass.SetDirection(doub.floatValue());
boolean bool = input.getBooleanExtra("com.some.thing.ZUPT_STATUS", false);
zuptRdBtn.setChecked(bool);
UpdateGpsIndicator(input);
}
public void UpdateGpsIndicator(Intent input)
{
boolean bool = input.getBooleanExtra("com.some.thing.GPS_ON", false);
gpsRdBtn.setChecked(bool);
}
private boolean IsMyServiceRunning()
{
ActivityManager manager = (ActivityManager) getActivity().getSystemService(Context.ACTIVITY_SERVICE);
for (RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE))
{
if ("com.some.thing.Service".equals(service.service.getClassName()))
return true;
}
return false;
}
}
Además, no puedo verificar algunos botones de opción en ninguna de las Vistas de Fragmentos. Estoy pensando que tengo un problema relacionado con las Vistas que usan los Fragmentos. – Matt