2012-04-20 16 views
7

Ben android geliştirme konusunda yeniyim ve şu anda farklı etkinlikler arasında geçiş yapmak için tabhost ve TabActivity kullanarak bir uygulama yaratıyordum. Bu uygulama iyi çalışıyordu, ancak son zamanlarda TabActivity'nin kullanımdan kaldırıldığını ve bunun yerine fragmanı kullanacağını keşfettim.Bir düzen içinde ImageButton ile bir program şişirmek Programlı olarak

Yani, bunu yapmak için nasıl açıklayan bu büyük öğretici izleyin: http://thepseudocoder.wordpress.com/2011/10/04/android-tabs-the-fragment-way/

Çoğu çalışıyor, ama benim sorun var şimdi fragmanları bu tür kullanımı ımagebutton şişirme edildi olan eski aktivitelerden bazılarıdır yöntem: bir fragman içinde bu yöntem derlemek mümkün olması için

private void displayLevelButtons() { 
    LayoutInflater lf = getLayoutInflater();    
     btns = lf.inflate(R.layout.mallmapactivity_level_buttons, null, false); 

     mBtnLevelDown = (ImageButton) btns.findViewById(R.id.btn_level_down); 
     mBtnLevelUp = (ImageButton) btns.findViewById(R.id.btn_level_up); 

     mBtnLevelDown.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View view) {     
       levelDown(); 
       updateLevelButtons(); 
      } 
     }); 
     mBtnLevelUp.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       levelUp(); 
       updateLevelButtons(); 
      } 
     }); 

     LayoutParams params = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 
     params.gravity = Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL | Gravity.RIGHT;    
     addContentView(btns,params); 

    } 

ben değiştirildi:

LayoutInflater lf = getLayoutInflater(); 

LayoutInflater lf = getActivity().getLayoutInflater(); 

ve

addContentView(btns,params); 

getActivity().addContentView(btns,params); 

için Ama bu düğmelerimi yapmak gibi) (benim yöntemi displayLevelButtons kullanılarak

değil de, benim genel görünümünün sağ alt kısmında görünen benim parçamın sağ alt kısmı.

public class MyFragment extends Fragment { 

    private View btns;   
    private ImageButton mBtnLevelUp; 
    private ImageButton mBtnLevelDown; 
    private ViewGroup myViewGroup; 

@Override 
    public View onCreateView (LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     if (container == null) { 
      return null; 
     } 
     myViewGroup = container; 
     v = inflater.inflate(R.layout.mallmaptile, container, false);   
     return v; 
    } 

@Override 
    public void onViewCreated(View view, Bundle savedInstanceState) { 
     //Do some stuff and then : 
      displayLevelButtons();   

    } 

private void displayLevelButtons() { 
     LayoutInflater lf = getActivity().getLayoutInflater();   
     btns = lf.inflate(R.layout.mallmapactivity_level_buttons, myViewGroup, false); 

     mBtnLevelDown = (ImageButton) btns.findViewById(R.id.btn_level_down); 
     mBtnLevelUp = (ImageButton) btns.findViewById(R.id.btn_level_up); 

     mBtnLevelDown.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View view) {      
       levelDown(); 
       updateLevelButtons(); 
      } 
     }); 
     mBtnLevelUp.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       levelUp(); 
       updateLevelButtons(); 
      } 
     }); 

     LayoutParams params = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 
     params.gravity = Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL | Gravity.RIGHT;    
     getActivity().addContentView(btns,params); 

    } 

Bunu yaparak benim düğmeleri hala benim genel görünümün altında gösterilmez de vardır: Görüntü düğmeleri ile benim düzeni şişirme zaman

Ben de, bu gibi bakarak benim tüm fragman sınıf bir kök belirtmek için çalıştı benim parçanın alt ve ben true attachToRoot boolean değerini değiştirmeye çalışırsanız: java.lang.IllegalStateException:

btns = lf.inflate(R.layout.mallmapactivity_level_buttons, myViewGroup, true); 

hatası alıyorum belirtilen alt zaten bir üst vardır. Önce çocuğun ebeveyinde removeView() öğesini çağırmalısınız.

Eminim, önemli bir şeyi özledim ama ne yapmam. Herhangi bir öneri gerçekten takdir edilecektir. Eğer o zaman aşağıdaki kodu kullanabilirsiniz düzeni şişirme sorunu karşı karşıya iseniz önceden

sayesinde

cevap

12

: o zaman getirmek için bu düzeni kullanabilirsiniz

View headerView = View.inflate(this, R.layout.layout_name, null); 

bu size tam ebeveyn düzeni verecektir ne olursa olsun istediğiniz görünümü veya düzen param'ını bulabilir ve daha sonra herhangi bir görünüm için düzen paramını ayarlayabilir (sizin durumunuzda butona bence).

+0

olmadan problem with inflater

yapabilirsin), R.layout.mallmapactivity_level_buttons, null); "Bu" özelliğini kullanamıyorum çünkü sınıfım bir parçayı genişletiyor, ben de bunun yerine "getActivity()" işlevini kullanıyorum ancak parçacığımın içeriği için iyi bir yöntem olduğundan emin değilim. Yine de bunu yapmak benim genel görünümüne göre benim görünümüme göre – Digoun

+0

parçacığına göre değil, aslında btns = View.inflate (v.getContext(), R.layout.mallmapactivity_level_buttons, myViewGroup) öğelerini kullanarak şişiriyor; çalışıyor. Teşekkürler – Digoun

+0

Liste görünümünde bunu kullanarak birkaç sorun çözdüm. Hoşgeldin .. –

0

Ben aynı sorunu vardı ve bu bağlantıdaki benim cevap bulmak: btns = View.inflate (getActivity (i denedim benim yönteminde herhangi bağımlılık

LayoutInflater inflater = LayoutInflater.from(getContext()); 
inflater.inflate(R.layout.view_with_merge_tag, this); 
İlgili konular