gpt4 book ai didi

android - findViewById 使用处理程序类为自定义 ImageView 返回 null

转载 作者:行者123 更新时间:2023-11-29 00:40:24 25 4
gpt4 key购买 nike

我已经通读了很多有关 findViewById 的线程,它们为自定义类返回 null,但我无法准确找到我的错误。我有一个主要 Activity ,它膨胀了一个 fragment (LinearLayout)。我想使用处理程序用我的几个自定义 ImageView 填充此 LinearLayout。处理程序基本上创建每个自定义 ImageView 并将它们放入一个 ArrayList 中,可以在主 Activity 中读取。

在我的自定义 ImageView 中,我有以下构造函数:

public CustomView(Context context) {
super(context);
}
public CustomView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public CustomView(Context context, int ID, String c, String s, int relID, int relAngle,
Float absX, Float absY, int [] inNumbers ) {
super(context);

this.setId(ID);
color = c;
size = s;
x_pos = absX;
y_pos = absY;
dependence = inNumbers;
rel_id = relID;
rel_angle = relAngle;
}

然后,在我的处理程序类中,我执行以下操作:

customViews = new ArrayList<CustomView>();

for ( int k = 0; k < numberOfCustomViews; k++ ){

CustomView w = new CustomView(ctx,
scanner.nextInt(), //ID
scanner.next(), //Color
scanner.next(), //Size
scanner.nextInt(), //Relative ID
scanner.nextInt(), //Relative angle
scanner.nextFloat(), //Absolute x (percent)
scanner.nextFloat(), //Absolute y (percent)
new int[] {scanner.nextInt(), //Dependence numbers
scanner.nextInt()});

customViews.add(w);
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
w.getSizeAsResource(), w.getSizeAsResource());

w.setLayoutParams(lp);
Log.d(TAG, "CustomView added!");
}

在我的主要 Activity 中,我执行以下操作来测试第一个 CustomView 是否可用:

 customViewTest = (CustomView) (findViewById(customViewHandler.customViews.get(1).getId()));

if ( customViewTest == null )
Toast.makeText(this, "customViewTest == null", Toast.LENGTH_LONG).show();

这总是显示 toast 。我在这里错过了什么?我需要充气什么的吗?应该可以通过编程方式将自定义 View 添加到布局。

最佳答案

确实可以通过编程方式将 View 添加到布局,但看起来您实际上根本没有将 View 添加到任何布局。您只是在创建一个 View 列表。

Activity.findViewById 将返回一个 View ,如果在其布局中包含具有该特定 id 的某个 View 。这意味着不会找到不属于主视图层次结构的 View ,即使它们具有正确的 ID。

在您的“处理程序类”执行后,您最终会得到一个孤立 View 列表,也就是说,它们没有父 View ,特别是,它们不是布局的一部分 Activity 。

鉴于您希望在 fragment 中使用它们,将它们直接添加到 Activity 的主布局中是没有意义的。 fragment 的好处之一是您可以管理更小的相关 View 组。您应该将自定义 View 添加到要使用它的 fragment 的 View 中。您可以将所需的参数传递给 fragment ,并让它构建这些 View 。

关于android - findViewById 使用处理程序类为自定义 ImageView 返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9762149/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com