时,片段布局中的文本视图不会更改我的应用程序(最低等级13)是一个活动,它使用操作栏中的选项卡来管理几个片段,非常类似于this。当调用SetText()
现在,活动启动一个服务,它执行连续计算并返回值,我希望在碎片中显示。活动 - 服务通信通过广播接收器实现,活动将数据混洗到适当的片段。
似乎所有东西都安装正确,并且数据使其成为碎片更新方法,但是当我尝试在文本视图中显示新值时,新值从不显示。
改变textviews代码:
TextView tv = (TextView) getView().findViewById(R.id.fieldNavGpsTime);
Double doub = input.getDoubleExtra("com.some.thing.GPS_TIME", -1.0);
tv.setText(doub.toString());
的代码来调用活动从广播接收器的碎片更新方法:
NavigationGuiFragment navfrag = (NavigationGuiFragment) getFragmentManager().findFragmentByTag("navigation");
if (navfrag != null && navfrag.isResumed())
navfrag.UpdateNavUI(intent);
我注意到ISVISIBLE()没有按似乎永远不会回复真实,但我不确定它是什么意思或如何改变它。
此外,我似乎无法以编程方式将图像视图添加到片段。这里是(驻留在onActivityCreated())代码:
this.compass = new BasicCompass(getActivity());
LinearLayout ll = (LinearLayout) getView().findViewById(R.id.nav_hrztl_lnly);
ll.addView(this.compass);
的BasicCompass构造函数有一个背景下,诚然我不能完全肯定就是我传递是正确的。
其中的代码或多或少取自工作活动并放入碎片以允许制表符。对于改变代码结构,我愿意提供建议。
感谢您的任何帮助。
编辑
片段的XML布局:
<?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>
而且使用它的片段:
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;
}
}
此外,我无法检查我的任何碎片视图中的一些单选按钮。我在想,我有一个与碎片使用的视图有关的问题。 – Matt 2012-02-03 00:51:53