Java 如果是复合视图,findViewById(R.id.view\u id)返回null

Java 如果是复合视图,findViewById(R.id.view\u id)返回null,java,android,android-layout,android-view,Java,Android,Android Layout,Android View,复合视图xml代码:- <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/dayRelativeLayout" android:layout_width="30dip" android:layout_height="45dip" andr

复合视图xml代码:-

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/dayRelativeLayout"
    android:layout_width="30dip"
    android:layout_height="45dip"
    android:background="@drawable/selectable_day_layout_border">

   <TextView android:id="@+id/eventTextView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_alignParentLeft="true"
        android:textSize="12dip"
        android:visibility="invisible"
        android:layout_margin="2.1dip"
        android:textAppearance="?android:attr/textAppearanceSmall"/>

    <TextView
        android:id="@+id/dayTextView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:layout_gravity="center"
        android:layout_below="@+id/eventTextView"
        android:textAppearance="?android:attr/textAppearanceSmall"/>
</RelativeLayout>
下面是我在其中使用上述复合控件的gridlayout xml代码:-

public class CalendarGridView extends RelativeLayout
{
    private Context context = null;

    private TextView eventTextView = null;

    private TextView dayTextView = null;

    public CalendarGridView(Context context)
    {
        super(context);

        this.context = context;

        init();
    }

    public CalendarGridView(Context context, AttributeSet attrs)
    {
        super(context, attrs);
        this.context = context;
        init();
    }

    public CalendarGridView(Context context, AttributeSet attrs,int defStyle)
    {
        super(context, attrs, defStyle);
        this.context = context;
        init();
    }

    private void init()
    {
        int id = (int)Math.abs(Math.random()*100000);

        super.setId(id);

        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        addView(inflater.inflate(R.layout.day_view, null));

        eventTextView = (TextView) findViewById(R.id.eventTextView);

        dayTextView = (TextView) findViewById(R.id.dayTextView);

        eventTextView.setOnClickListener(new GridClickListener());

        dayTextView.setOnClickListener(new GridClickListener());
    }

    public TextView getEventTextView()
    {
        return eventTextView;
    }

    public TextView getDayTextView()
    {
        return dayTextView;
    }

    class GridClickListener implements OnClickListener
    {
        @Override
        public void onClick(View v)
        {
            calculateClickedGrid(v);
        }
    }

    private void calculateClickedGrid(View v)
    {
        int id = ((ViewGroup)v.getParent()).getId();

        GridCordinates cordinates = GridViewUtil.getGridCordinate(id);

        if(cordinates != null)
        {

        }
    }
}
<?xml version="1.0" encoding="utf-8"?>
<GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content" android:layout_height="wrap_content"
    android:rowCount="8"
    android:columnCount="7"
    android:background="@drawable/selectable_day_layout_border">

    <!-- Row 0-->
    <ImageButton
        android:id="@+id/previousMonthImageButton"
        android:layout_row="0"
        android:layout_columnSpan="1"
        android:layout_column="0"
        android:layout_gravity="center"
        android:layout_margin="3dip"
        android:padding="3dip"
        android:background="#7F7CD9"
        android:src="@drawable/navigation_previous_item"/>
    <TextView
        android:id="@+id/monthNameTextView"
        android:text="September"
        android:layout_row="0"
        android:layout_columnSpan="5"
        android:layout_column="1"
        android:layout_gravity="center"
        android:layout_margin="3dip"
        android:padding="3dip"
        android:textSize="25dip"
        android:background="#7F7CD9"/>

    <ImageButton
        android:id="@+id/nextMonthImageButton"
        android:layout_row="0"
        android:layout_columnSpan="1"
        android:layout_column="6"
        android:layout_gravity="center"
        android:layout_margin="3dip"
        android:padding="3dip"
        android:background="#7F7CD9"
        android:src="@drawable/navigation_next_item"/>

    <!-- Row 1-->

    <com.gp.app.minote.calendar.ui.CalendarGridView
        android:id="@+id/day1"
        android:layout_row="2"
        android:layout_column="0"
        android:layout_width="30dip"
        android:layout_height="40dip"
        android:layout_margin="2dip"
        android:padding="3dip"
        android:layout_gravity="center"
        android:background="@drawable/selectable_day_layout_border"/>

    <com.gp.app.minote.calendar.ui.CalendarGridView
        android:layout_width="30dip"
        android:layout_height="40dip"
        android:id="@+id/day2"
        android:layout_row="2"
        android:layout_column="1"
        android:layout_margin="2dip"
        android:padding="3dip"
        android:layout_gravity="center"
        android:background="@drawable/selectable_day_layout_border"/>

    <com.gp.app.minote.calendar.ui.CalendarGridView
        android:layout_width="30dip"
        android:layout_height="40dip"
        android:id="@+id/day3"
        android:layout_row="2"
        android:layout_column="2"
        android:layout_margin="2dip"
        android:layout_gravity="center"
        android:padding="3dip"
        android:background="@drawable/selectable_day_layout_border"/>

<!--  More CalendarGridViews but deleted for clarity -->
</GridLayout>
返回非空值,而findViewById(id)在以下行中:-

calendarGrids.add((CalendarGridView) findViewById(R.id.day2));
calendarGrids.add((CalendarGridView) findViewById(R.id.day3));
返回空值


我已经尝试解决这个问题很久了,但并没有弄清楚为什么同一个方法会为不同的视图返回null和非null值。我认为这与复合视图有关。请帮助。

您初始化
视图=充气机。充气(R.layout.calendar\u grid\u layout,null)

请传递视图对象

      previousMonthImageButton =(ImageButton)view.findViewById(R.id.previousMonthImageButton);
      monthNameTextView = (TextView)view. findViewById(R.id.monthNameTextView);
      nextMonthImageButton = (ImageButton)view.findViewById(R.id.nextMonthImageButton);
这样试试,我希望对你有帮助

calendarGrids.add((CalendarGridView) findViewById(R.id.day2));
calendarGrids.add((CalendarGridView) findViewById(R.id.day3));
      previousMonthImageButton =(ImageButton)view.findViewById(R.id.previousMonthImageButton);
      monthNameTextView = (TextView)view. findViewById(R.id.monthNameTextView);
      nextMonthImageButton = (ImageButton)view.findViewById(R.id.nextMonthImageButton);