2013-03-10 44 views
14

içinde benim textView güncelleştirin İlk uygun Android App oluşturmak için parçaları kullanmaya çalışıyorum. Ana bir xml var. İki dikey parçadan oluşan üst kısımlar sadece iki TextView'den oluşur. Bunlardan ilki statik metin içerir ve ikincisi sonunda SQL'den dinamik olarak alacağım bir değer içerir.Android: Nasıl bir Fragman

ben bu o zaman mutlu benim ilk Fragment TextView değerini günceller benim MainActivity.java olduğunu koyarsanız: Her yüzden koymak istiyorum desteklemek için iki parça XMLs var

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    setContentView(R.layout.activity_main); 

    // Set the Text to try this out 
    TextView t = (TextView)findViewById(R.id.viewItem); 
    t.setText("Text to Display"); 
} 

ve java MainActivity için java'dan ziyade parçayı destekleyen bu alanın Java'ya ayarlanması.

public class FragmentMainTop extends Fragment { 
@Override 
public View onCreateView(LayoutInflater inflater, 
     ViewGroup container, Bundle savedInstanceState){ 
    // -- inflate the layout for this fragment 
    return inflater.inflate(R.layout.fragmentmt, container,false); 

    // Set the Text to try this out 
    TextView t = (TextView)findViewById(R.id.viewItem); 
    t.setText("Text to Display"); 
} 

Ama bunu ben TextView'un hattında bir hata alıyorum:

"yöntemi findViewById (int) 'dir: - Ben fragmanında sürdüğünüzde

bu gibi görünüyor FragmentMainTop türü için undefined "

Neden bu yöntemi bilmiyor? Ctl/shift/o var, bu yüzden tüm doğru ithalatlara sahip olduğumu biliyorum. Tüm kodumu MainActivity içine koymak istemiyorum çünkü eğer Fragmanı başka bir aktivitede kullanmak istersem, tüm kodu tekrarlamak zorunda kalacağım.

cevap

45

findViewById() yöntemine erişebilmeniz için şişirilmiş parça düzenini bir değişkene atamanız gerekir. Sonra widget'larınızı güncellemeyi tamamladıktan sonra iade edersiniz. Bir Activity içinde findViewById() çağırdığınızda

@Override 
public View onCreateView(LayoutInflater inflater, 
     ViewGroup container, Bundle savedInstanceState){ 
    // -- inflate the layout for this fragment 
    View myInflatedView = inflater.inflate(R.layout.fragmentmt, container,false); 

    // Set the Text to try this out 
    TextView t = (TextView) myInflatedView.findViewById(R.id.viewItem); 
    t.setText("Text to Display"); 

    return myInflatedView; 
} 

Normalde, sen Activity.findViewById() yürütmesini ediyoruz. Fragment sınıfınızda aynı aramayı denemek, böyle bir Fragment.findViewById() yöntemi olmadığından başarısız olacaktır. Yani, widget'larınıza referans almak için şişirilmiş görünümünüzle View.findViewById()'u kullanmalısınız.

+0

referanslar başarıyla da döndürülür. Ancak görünümlerin dinamik olarak güncellenmesi hala çalışmıyor –

2

Ben uzmanı değilim ama bir yöntem içinde bu dönüş ifadesi şey döner ve bu ifadeye sonraki satırlar ulaşılamaz söyleyebilirim: O

Yani sırasını değiştirmek için deneyin! :) Ben bir TextView güncelleştirmek için benim etkinlikten bu kodu kullanıyorum

0

xml etiketinde ekledi. Metin görünümü, sınıf düzeyi nesnelerdir. İşte biraz kod:

<fragment 
    android:id="@+id/fragmentRegister" 
    android:name="com.proshore.loveis.RegisterFragment" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_alignParentLeft="true" 
    android:layout_below="@+id/view1" /> 

İşte parçası kod sadece sınıf düzeyi değişkeni gösteren.

public class RegisterFragment extends Fragment implements OnClickListener { 

TextView textViewDOB, textViewLanguage; 

public RegisterFragment() { 
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
//eluded methods here 
} 
} 

Şimdi benim parçasını güncellemek yerden aktivite:

public class RegisterActivity extends FragmentActivity { 
Button buttonEnter; 
RegisterFragment fragmentRegister; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_register); 
    buttonEnter = (Button) findViewById(R.id.buttonEnter); 
    fragmentRegister = (RegisterFragment) getSupportFragmentManager() 
      .findFragmentById(R.id.fragmentRegister); 
} 

@Override 
protected void onStart() { 
    // TODO Auto-generated method stub 
    super.onStart(); 
    buttonEnter.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      Log.d("dontknowitwillowrk", fragmentRegister.textViewLanguage 
        .getText().toString()); 
      fragmentRegister.textViewLanguage.setText("hello mister how do you do"); 


     } 
    }); 
} 
} 

Not: Bu iyi bir yol olup olmadığından emin değil. i fragment.getActivity tarafından döndürülen Aktivite() ile findViewByID ne zaman