自定义视图 returns 初始化时为 NULL

Custom view returns NULL when initialized

我想创建一个自定义的可重用视图以在 gridlayout 中显示。

我似乎无法初始化视图。在我的 Activity

中总是 returns null

任何人都可以帮助我理解我做错了什么吗?我觉得它在我的 Tile 构造函数中。

我的Activity:

private void addTile() {
       TileView tile = new TileView(this);
       tile.setTextTitle("CALLS");
       tile.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                tilePressed(v);
            }
       });

       mGridLayout.addView(tile);   
}

Activity 的 XML 的 GridLayout 部分:

<GridLayout
    android:id="@+id/glTileArea"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@color/COLOR_LIGHT_GREEN"
    android:columnCount="2"
    android:rowCount="2" >

</GridLayout>

我的可重用视图:

public class TileView extends View{

        private View mView;
        private Context mContext;
        private TextView mTitle;


        public TileView(Context context) {
            super(context);
            this.mContext = context;
        }

        public View TileView(){
            LayoutInflater inflater = ((Activity) mContext).getLayoutInflater();
            mView = inflater.inflate(R.layout.sample_tile_view,null);

            mTitle = (TextView) mView.findViewById(R.id.tvTitle);

            return mView;
        }

        public void setTextTitle(String text){
             mTitle.setText(text);
        }
}

XML:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="match_parent"
              android:layout_height="match_parent"
              android:background="@color/COLOR_BLUE"
              android:orientation="vertical">

    <TextView
        android:id="@+id/tvTitle"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:padding="5dp"
        android:text="TITLE"
        android:textAlignment="center"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:textColor="@color/COLOR_WHITE"
        android:textStyle="bold"/>


</LinearLayout>

我得到的错误:

Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference at com.mycompany.myapp.Views.TileView.setTextTitle (TileView.java:77)

问题是由于:

tile.setTextTitle("CALLS");

行。 mTitlenull 因为在初始化 TextView 的任何地方都没有调用 TileView() 方法。

要么在调用setTextTitle方法之前调用TileView()

tile.TileView();
tile.setTextTitle("CALLS");

或者在构造函数中调用TileView方法:

public TileView(Context context) {
   super(context);
   this.mContext = context;
   this.TileView(); //<< call here
}

尝试将TileView()中的代码移动到TileView(Context context)

public TileView(Context context) {
    super(context);
    this.mContext = context;
    LayoutInflater inflater = ((Activity) mContext).getLayoutInflater();
    mView = inflater.inflate(R.layout.sample_tile_view,null);
    mTitle = (TextView) mView.findViewById(R.id.tvTitle); 
}