2014-09-04 101 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

相关问题