2014-09-04 55 views
0

我嘗試清理項目並使用膨脹,但它沒有工作。 但也許我沒有使用充氣權。 我需要一些幫助來使用充氣權或任何想法來使指針正確。findViewById在自定義視圖中返回null

這裏是代碼

MainActivity.java - > activity_main.xml中 - > FaceGridView.java

MainActivity.java

public class MainActivity extends FragmentActivity { 
FaceGridView myGridview; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     requestWindowFeature(Window.FEATURE_NO_TITLE); 
     setContentView(R.layout.activity_main); 

     myGridview = (FaceGridView) findViewById(R.id.facegridview); 
    } 
} 

activity_main.xml中

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="vertical" > 

<com.example.ngvvp.FaceGridView 
    android:id="@+id/facegridview" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentBottom="true" 
    android:layout_alignParentRight="true" 
    > 
    <RelativeLayout 
     android:id="@+id/mainRLayout" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
    > 
     <android.support.v4.view.ViewPager 
       android:id="@+id/pager" 
       android:layout_width="fill_parent" 
       android:layout_height="285px" 
       android:layout_above="@+id/pagerIndicator" 
       /> 

    <com.example.ngvvp.CirclePageIndicator 
     android:id="@+id/pagerIndicator" 
     android:layout_width="fill_parent" 
     android:layout_height="15px" 
     android:layout_marginBottom="5dp" 
     android:layout_marginTop="5dp" 
     android:padding="3dp" 
     android:layout_alignParentBottom="true"/> 
    </RelativeLayout> 

FaceGridView.java

public class FaceGridView extends ViewGroup { 
public PageIndicator mIndicator; 
private ViewPager awesomePager; 
private PagerAdapter pm; 
private RelativeLayout mainRLayout; 
public Context myContext; 
public View MAIN ; 

public void initial() { 
    MAIN = (View)findViewById(R.layout.activity_main); 
    mIndicator = (PageIndicator)findViewById(R.id.pagerIndicator); 
    awesomePager = (ViewPager)findViewById(R.id.pager); 
    mainRLayout = (RelativeLayout)findViewById(R.id.mainRLayout); 
    System.out.println("MAIN["+MAIN+"] \n"+ 
         "mIndicator["+mIndicator+"] \n"+ 
         "awesomePager["+awesomePager+"] \n"+ 
         "mainRLayout["+mainRLayout+"] \n"+ 
         "myContext["+myContext+"]\n"); 
} 
public FaceGridView(Context context) { 
    super(context); 
    this.myContext = context; 
    initial(); 
    InsideMethod(); 
} 

public FaceGridView(Context context, AttributeSet attrs) { 
    super(context, attrs); 
    this.myContext = context; 
    initial(); 
    InsideMethod(); 
} 

除了myContext其它指針均爲空

09-04 14:52:46.644: I/System.out(23503): MAIN[null] 
09-04 14:52:46.644: I/System.out(23503): mIndicator[null] 
09-04 14:52:46.644: I/System.out(23503): awesomePager[null] 
09-04 14:52:46.644: I/System.out(23503): mainRLayout[null] 
09-04 14:52:46.644: I/System.out(23503): myContext[[email protected]] 

我不知道發生了什麼。 任何人有任何想法?

+0

我認爲,因爲在您的初始方法中沒有活動視圖。這意味着android不知道在哪裏可以找到這些id。查看main = anotherView.findViewById(R.layout.activity_main); – 2014-09-04 07:03:59

+1

你在哪裏打電話給initial()?如果在構造函數中它的錯誤地方,請嘗試onFinishInflate() – pskink 2014-09-04 07:22:45

+0

請發佈您的'FaceGridView'構造函數。 – laalto 2014-09-04 07:50:20

回答

0

你應該使用這樣

LayoutInflater inflater = ((Activity) context).getLayoutInflater(); 
row = inflater.inflate(R.layout.activity_main, parent, false); 

mIndicator = (PageIndicator) row.findViewById(R.id.textView1); 
awesomePager = (ViewPager) row.findViewById(R.id.imageView1); 
+0

謝謝,並只是確保 是排一個視圖? 和我在父母身上輸入什麼?父母是誰? – 2014-09-04 08:10:42

+0

@楊晉豪嘗試在onFinishInflate() – pskink 2014-09-04 08:36:56

+0

中調用initial()後,我試過它仍然是null,但是還是謝謝 – 2014-09-04 09:34:03

0

有我的同學試過可以使指針正確的結果。 它不是我想要的方式,但結果是,它的作品。它爲遇到同樣問題的人給我。

MainActivity.java

public class MainActivity extends FragmentActivity { 
FaceGridView myGridview; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     requestWindowFeature(Window.FEATURE_NO_TITLE); 
     setContentView(R.layout.activity_main); 
     myGridview = (FaceGridView) findViewById(R.id.facegridview); 
     myGridview.initial(this); 
    } 

} 

FaceGridView.java

public class FaceGridView extends ViewGroup { 
public PageIndicator mIndicator; 
private ViewPager awesomePager; 
private PagerAdapter pm; 
private RelativeLayout mainRLayout; 
public Context myContext; 
public View MAIN ; 
ArrayList<Category> codeCategory; 

public void initial(Context ctx) { 

    this.myContext = ctx; 


    mIndicator = (PageIndicator) ((Activity) myContext).findViewById(R.id.pagerIndicator); 
    awesomePager = (ViewPager) ((Activity) myContext).findViewById(R.id.pager); 

    System.out.println("myContext["+myContext+"] \n"+ 
         "mIndicator["+mIndicator+"] \n"+ 
         "awesomePager["+awesomePager+"] \n"); 

    InsideMethod(); 
} 

public FaceGridView(Context context, AttributeSet attrs) { 
    super(context, attrs); 
    System.out.println("FaceGridView(Context context, AttributeSet attrs) ["+context+"] "); 
// this.myContext = context; 
//  initial(); 
//  InsideMethod(); 
} 

它的我第一次問問題,關於計算器,我從來沒有想過得到這麼短的時間這麼多回復,你們讓我感受到愛TAT,謝謝大家。

+0

不,不,不,不這樣做,看到它是如何工作的:http://pastebin.com/A16ZGsa8 – pskink 2014-09-04 10:15:18

+0

哈哈然後我就使用日誌,而不是我的壞習慣是System.out.print。謝謝〜 – 2014-09-09 04:22:27

相關問題