gpt4 book ai didi

java - 在 Android 中 inflatedView 后,自定义 View 子项为空

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:17:15 26 4
gpt4 key购买 nike

我正在开发一款 Android 应用。我有一个自定义 View 和布局,如下所示:

<com.hello.view.card.inner.SimpleCardView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/card_simple_linear_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

<TextView
android:id="@+id/simple_label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>

</com.hello.view.card.inner.SimpleCardView>

这是 Java 类:

public class SimpleCardView extends LinearLayout {
protected SimpleCard card = null;
protected TextView textView;

public SimpleCardView(Context context) {
super(context);
init(context);
}

public SimpleCardView(Context context, AttributeSet attrs) {
super(context, attrs);
init(context);
}

public SimpleCardView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
init(context);
}

protected void init(Context context) {
textView = (TextView)findViewById(R.id.simple_label);
}

public void setCard(SimpleCard card) {
this.card = card;
textView.setText(card.getMessage());
}
}

这就是我膨胀 View 的方式(我尝试了以下两个调用):

SimpleCardView view = (SimpleCardView)inflater.inflate(R.layout.card_simple, null);
//SimpleCardView view = (SimpleCardView)inflater.inflate(R.layout.card_simple, parent);
view.setCard(card);

我遇到的问题是调用 view.setCard(card) 时,我看到 textView 为空,尽管我希望它在 init(..) 方法中设置。谁能告诉我它没有正确设置什么?提前致谢。

最佳答案

感谢您的回答。事实证明,不应该在构造函数中调用 init(context)。调用它的正确位置是在 onFinishInflate() 中。以下更改有助于修复它:

public class SimpleCardView extends LinearLayout {
protected SimpleCard card = null;
protected TextView textView;

public SimpleCardView(Context context) {
super(context);
}

public SimpleCardView(Context context, AttributeSet attrs) {
super(context, attrs);
}

public SimpleCardView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}

@Override
protected void onFinishInflate() {
super.onFinishInflate();
init(getContext());
}

protected void init(Context context) {
textView = (TextView)findViewById(R.id.simple_label);
}

public void setCard(SimpleCard card) {
this.card = card;
textView.setText(card.getMessage());
}
}

关于java - 在 Android 中 inflatedView 后,自定义 View 子项为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24462718/

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