0

我知道有几十个类似的帖子,但在我看来,这里的一切都是正确的:

自定义小部件:

public class DoubleTextItem extends LinearLayout {

private TextView txtMain;
private TextView txtDescription;

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

@Override
protected void onFinishInflate() {
    super.onFinishInflate();
    ((Activity)getContext()).getLayoutInflater().inflate(R.layout.widget_double_text_item, this);
    setupViewItems();
}

private void setupViewItems() {
    txtMain = (TextView) findViewById(R.id.txtMain);
    txtDescription = (TextView) findViewById(R.id.txtDecription);
}
public void setDescription(String text) {
    txtDescription.setText(text);
}
}

自定义小部件布局 xml:

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

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

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

</LinearLayout>

在活动函数中,我得到一个转换错误,

LayoutInflater inflater = LayoutInflater.from(this);
DoubleTextItem item = (DoubleTextItem) inflater.inflate(R.layout.widget_double_text_item, layout);              
item.setText(som-txt);
item.setDescription("#"+athlete.getString("position"));
4

1 回答 1

2

在这里,根视图是一个 LinearLayout 但您尝试将其转换为您的自定义类:

DoubleTextItem item = (DoubleTextItem) inflater.inflate(R.layout.widget_double_text_item, layout);              

标准建议是:

所有的 DoubleTextItem 都是 LinearLayout,但并非所有的 LinearLayout 都是 DoubleTextItem。

这意味着您不能将对象从 LinearLayout 向下转换为 DoubleTextItem,假设太多,Java 不会让您这样做。

如果你想在你的布局中使用 DoubleTextItem,你需要使用:

<your.package.name.DoubleTextItem 
    ... />

(另外,在里面调用 inflateonFinishInflate()似乎有点傻,特别是因为你没有保存充气的项目......如果你想充气不同的布局,不要充气第一个。)


总体而言,您似乎正在尝试重新创建现已弃用的TwoLineListItem,也许您可​​以从它的源代码中学习一些指针(或者只使用 TwoLineListItem。)

于 2013-02-10T21:10:07.917 回答