2012-05-08 21 views
6

Özel görünümü xml aracılığıyla oluşturmaya çalışıyorum, ancak ekran görünümümü göstermiyor, şişirmiyor. olarak benim özel View sınıf varÖzel Görünüm şişirmiyor

<?xml version="1.0" encoding="utf-8"?> 
<ViewSwitcher xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/profileSwitcher" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:background="#FFFFFF" > 

    <LinearLayout 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" > 

     <ImageView 
      android:id="@+id/imgAdvertise" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:src="@android:drawable/btn_minus" /> 
    </LinearLayout> 

    <LinearLayout 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:gravity="center_horizontal" > 

     <TextView 
      android:id="@+id/txtAdvertise" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:text="asdas" /> 
    </LinearLayout> 

</ViewSwitcher> 

: Ben View göstermek zorunda nerede

public class MyCustomView extends View{ 

    TextView textAdvertise; 
    ImageView imageAdvertise; 
    View view; 
    ViewSwitcher switcher ; 

    public MyCustomView(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     // TODO Auto-generated constructor stub 

     LayoutInflater layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     if (layoutInflater != null) { 
      view = layoutInflater.inflate(R.layout.main, null); 

     } 

     initialize(); 
    } 

    public void initialize() { 
     // TODO Auto-generated method stub 

     textAdvertise = (TextView) view.findViewById(R.id.txtAdvertise); 
     imageAdvertise = (ImageView) view.findViewById(R.id.imgAdvertise); 
     switcher = (ViewSwitcher) view.findViewById(R.id.profileSwitcher); 
     startAnimation(); 

    } 

    public void startAnimation() { 
     // TODO Auto-generated method stub 

     new Thread() { 
      public void run() { 

       for (;;) { 
        try { 

         Thread.sleep(2000); 
         hRefresh.sendEmptyMessage(5); 
        } catch (Exception e) { 
        } 
       } 
      } 
     }.start(); 
    } 

    Handler hRefresh = new Handler() { 
     public void handleMessage(Message msg) { 
      switch (msg.what) { 
      case 5: 
       switcher.showNext(); 
       // To go back to the first view, use switcher.showPrevious() 
       break; 
      default: 
       break; 
      } 
     } 
    }; 

} 

ve benim taban xml düzeninde bir düğme ve ve benim View olduğu gibi Özel görünüm xml olduğu olarak:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:orientation="vertical" > 

<Button 
    android:id="@+id/button1" 
    android:layout_width="fill_parent" 
    android:layout_height="0dp" 
    android:text="Button" 
    android:layout_weight="1"/> 

<com.example.viewswitcher.MyCustomView 
    android:id="@+id/MyView" 
    android:layout_width="fill_parent" 
    android:layout_height="0dp" 
    android:layout_weight="1" 

    /> 

herkes Can lütfen bana neyin yanlış gittiğini söyle?

cevap

9

Hiçbir şey görmezsiniz çünkü MyCustomView yazdığınız içeriği içermiyor. Her şeyden önce ben ViewGroups çocuklarından birini yerine View (gibi LinearLayout, RelativeLayout vs) kullanmak:

public class MyCustomView extends LinearLayout { 

    TextView textAdvertise; 
    ImageView imageAdvertise; 
    View view; 
    ViewSwitcher switcher ; 

    public MyCustomView(Context context, AttributeSet attrs) { 
     super(context); 
    } 

    public MyCustomView(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     LayoutInflater layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     if (layoutInflater != null) { 
      view = layoutInflater.inflate(R.layout.main, this, true); 
     } 
     initialize(); 
    } 

    public MyCustomView(Context context, AttributeSet attrs, int theme) { 
     super(context, attrs, theme); 
    } 
// ... 
+1

Yardımlarınız için teşekkürler ... Çalıştı .. Aslında benim düzen şişirici ben yazım var = layoutInflater.inflate (R.layout.main, null); Bu null problemi neden olur .. bunun yerine "this" Çalıştı .. teşekkürler dostum! – NullPointerException

+0

Sorgulamada yaptığınız düzenleme ... ve bunun yerine çalıştığım bir şey daha var çünkü LinearLayout'u görmek yerine genişledim .. neden bu kadar? Bu detay ile ilgili herhangi bir link veya mesaj .. teşekkürler – NullPointerException

+2

@Rashmi Sorunun kodunu daha iyi biçimlendirmek için sorunuzu düzenledim. 'View' sınıfı tek bir' View' nesnesini temsil eder, '' inflate' yöntemiyle eklemeye çalıştığınız gibi '' View's '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' 'late Dokümanlar, ikinci parametrenin bir "ViewGroup" olduğunu görürsünüz. Bunun yerine bir 'ViewGroup' (' LinearLayout' 'ViewGroup'un bir alt sınıfıdır) '' View'ı temsil eder (aslında' View' adlı alt sınıfın bir alt sınıfıdır '). Herhangi bir bağlantı bilmiyorum ama "View" ve "ViewGroup" belgelerine bakabiliyordunuz. – Luksprog

0

Ben özel bir Görüntüleme değildir gerekenler düşünüyorum. Belki de View'un uyguladığı Fragment sınıfından miras almalısınız. Kendi Parçasının nasıl uygulanacağını görmek için here'a bakın.

+0

Üzgünüm fragmanlar benim durumumda yararlı değil .. çünkü benim android app uygulamasına uyumluluk vermek zorundayım – NullPointerException

+0

Android Destek Paketini kullanabilirsiniz. [link] (http://developer.android.com/sdk/compatibility-library.html). Minimum versión 4 (1.6, sanırım). – gutiory

3

Düzeninizi şişirmek için bunu kullanın. Düzenleme

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

Bu xml dosyasının ana düzenini dönecektir o zaman doğrudan kullanabilir veya

Düzenleme

headerView.findViewById(R.id.view_id); 

kullanarak başka bir görünümü bulabilirsiniz umarım işe yarayacaktır