我尝试创建自定义 ViewGroup 类,但是当我使用方法 findViewById()时,它返回null,但是对视图进行充气是正常的。
代码是:
public class HorizontalListView extends ViewGroup
{
private int mNumber = 0;
private ImageView mImage;
private LinearLayout mAdapter;
public HorizontalListView(final Context context, final AttributeSet set)
{
super(context, set);
LayoutInflater.from(getContext()).inflate(R.layout.layout_horizontal_list_view, this, false);
mAdapter = (LinearLayout) getChildAt(0);
}
/**Adds ImageView to LinearLayout (Adapter)
* g
* @param image
*/
public void addView(final Bitmap image)
{
mImage = (ImageView) LayoutInflater.from(getContext())
.inflate(R.layout.create_added_photo, null);
mImage.setImageBitmap(image);
mImage.setTag(mNumber);
mNumber++;
mAdapter.addView(mImage);
}
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b)
{
// TODO Auto-generated method stub
}
}
这里 mAdapter.addView(mImage); 我有一个NullPointerException
xml代码:
<?xml version="1.0" encoding="utf-8"?>
<HorizontalScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<LinearLayout
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center_vertical"
android:id="@+id/list_for_new_photos">
</LinearLayout>
</HorizontalScrollView>
答案 0 :(得分:2)
按如下方式更改您的代码
public HorizontalListView(final Context context, final AttributeSet set) {
super(context, set);
View view = LayoutInflater.from(getContext()).inflate(R.layout.layout_horizontal_list_view, this, false);
mAdapter = (LinearLayout) view.getChildAt(0);
}
或
public HorizontalListView(final Context context, final AttributeSet set) {
super(context, set);
View view = LayoutInflater.from(getContext()).inflate(R.layout.layout_horizontal_list_view, this, false);
mAdapter = (LinearLayout) view.findViewById(R.id.list_for_new_photos);
}
答案 1 :(得分:0)
您的mAdapter可能未在具有getChildAt(0);
行的HorizontalListView中实例化。
在那里你应该检查mAdapter是否为null,然后如果这是不可接受的,则将其实例化为其他内容。
如果mAdapter为空是好的,那么在你向其添加视图之前,你必须先询问mAdapter是否为null。您无法将视图添加到null mAdapter。
答案 2 :(得分:0)
确保在“land”和“layout”文件夹中都有布局xml文件。