2012-02-02 15 views
8

मेरा आवेदन (न्यूनतम स्तर 13) एक गतिविधि कार्रवाई बार में टैब का उपयोग करता है एक जोड़ी के टुकड़े, बहुत this के लिए इसी तरह का प्रबंधन करने के लिए है।Textviews जब setText बुला परिवर्तन नहीं करते()

अब, गतिविधि एक सेवा है जो निरंतर गणना करता है और मान जो मैं टुकड़े में प्रदर्शित करना चाहते हैं देता है शुरू होता है। गतिविधि - सेवा संचार प्रसारण रिसीवर के माध्यम से लागू किया जाता है और गतिविधि उचित टुकड़े के लिए डेटा को बंद कर देती है।

सब कुछ सही ढंग से सेटअप लगता है और डेटा टुकड़ा अद्यतन विधि के लिए बनाता लेकिन जब मैं textviews में नए मूल्यों को प्रदर्शित करने का प्रयास करें, नए मूल्यों कभी नहीं दिखाई देते हैं।

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 देखा है) नहीं करता है ऐसा लगता है कि कभी भी सच नहीं होता है, लेकिन मुझे यकीन नहीं है कि इसका क्या अर्थ है या इसे कैसे बदला जाए।

साथ ही, मैं प्रोग्राम के रूप में एक टुकड़ा करने के लिए एक imageView जोड़ने के लिए नहीं कर पा रहे। यहाँ (() जो 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; 
} 

}

+0

इसके अलावा मैं अपने किसी भी Fragments व्यू में कुछ रेडियो बटन नहीं देख सकता। मैं सोच रहा हूं कि मुझे उन दृश्यों से संबंधित एक समस्या है जो टुकड़े उपयोग करते हैं। – Matt

उत्तर

6

इस लाइन:

getActivity().setContentView(R.layout.navigation_fragment); 

Activity.onCreate() में कहा जाता है और यकीन है कि यह सिर्फ एक बार कहा जाता है बनाने की जानी चाहिए। आपके कोड में यह हर बार फ्रैगमेंट सक्रिय स्थिति में स्थानांतरित हो जाएगा। और TextView और RaidoButton सामान लेआउट xml में परिभाषित राज्य को रीसेट कर दिया जाएगा।

चेकआउट फ्रैगमेंट लाइफसाइक्ल here

अद्यतन: कुछ दृश्य विजेट की स्थिति गतिविधि, जैसे टेक्स्टव्यू द्वारा रखी जाएगी। setXXX() विधि onResume() पर ले जाने का प्रयास करें।मुझे अनुभव है कि setXXX()onActivityCreated() में काम नहीं कर रहा है लेकिन onResume() में अच्छी तरह से काम करता है।

+0

उत्तर के लिए धन्यवाद, पहले जवाब देने के लिए खेद है। यदि मेरे पास है, तो मेरे ऐप में पांच टुकड़े (एक्शनबार टैब का उपयोग करके) क्या मैं Activity.onCreate() में प्रत्येक खंड लेआउट पर setContentView() को कॉल करूंगा? साथ ही, यह एक टुकड़े से विचारों को सेट करने में सक्षम नहीं होने की समस्या को ठीक करेगा, ईमानदार होने के लिए मैं वास्तव में यह नहीं देख सकता कि यह कैसे मदद करेगा। – Matt

+0

मैं देखता हूं। तो आप खंड में वास्तव में कोई दृश्य विजेट नहीं है बल्कि गतिविधि के लिए नियंत्रक है। मेरा जवाब अपडेट करें। – Hank

+0

मेरे पास एक ही समस्या थी और सभी 'setXXX' कोड को' onViewCreated' से 'onResume' पर ले जाया गया था। Thx @ हांक! अजीब चीज यह है कि सब कुछ पहले खंड में जोड़ने पर अच्छा काम करता है, लेकिन उदाहरण के लिए जब 'पॉपबैकस्टैक' के माध्यम से खंड को फिर से जोड़ा जाता है। – tbruyelle

संबंधित मुद्दे