来自Android子类的textView上的java setText()
首先,我是Android开发的初学者! 在我的应用程序中,我包含了一个库,可以帮助我创建卡片用户界面。 在这个库中,您有一个基本的布局,其中有一个标题、描述和缩略图,但您可以创建和膨胀自定义布局,以便更好地填充卡片
我想做的是更改来自子类的TextView的文本,该子类链接到子布局。但是每次我试图从MainActivity调用setText方法时,都会得到一个NullPointerexception
这是我的小班:
import it.gmariotti.cardslib.library.internal.Card;
import it.gmariotti.cardslib.library.internal.Card.OnCardClickListener;
import 安卓.content.Context;
import 安卓.view.View;
import 安卓.view.ViewGroup;
import 安卓.widget.TextView;
import 安卓.widget.Toast;
public class CustomCardAccueil extends Card{
public TextView TitreExtensionAccueil;
public TextView DateSortieAccueil;
public TextView NombreCarteAccueil;
public TextView DescriptionExtensionAccueil;
public TextView RareteCarteAccueil;
public TextView DetailExtensionAccueil;
public CustomCardAccueil(Context context) {
this(context, R.layout.accueil_mycard_inner_content);
}
/**
*
* @param context
* @param innerLayout
*/
public CustomCardAccueil(Context context, int innerLayout) {
super(context, innerLayout);
init();
}
/**
* Init
*/
private void init(){
//No Header
//Set a OnClickListener listener
setOnClickListener(new OnCardClickListener() {
@Override
public void onClick(Card card, View view) {
Toast.makeText(getContext(), "Click Listener card=", Toast.LENGTH_LONG).show();
}
});
}
@Override
public void setupInnerViewElements(ViewGroup parent, View view) {
TitreExtensionAccueil = (TextView) parent.findViewById(R.id.TitreExtensionAccueil);
}
}
我要更改的文本视图所在的布局:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:安卓="http://schemas.安卓.com/apk/res/安卓"
安卓:layout_width="match_parent"
安卓:layout_height="match_parent" >
<TextView
安卓:id="@+id/TitreExtensionAccueil"
安卓:layout_width="wrap_content"
安卓:layout_height="wrap_content"
安卓:layout_centerVertical="true"
安卓:layout_marginLeft="20dp"
安卓:layout_marginTop="20dp"
安卓:textStyle="bold"
安卓:textAppearance="?安卓:attr/textAppearanceMedium" />
<TextView
安卓:id="@+id/DateSortieAccueil"
安卓:layout_width="wrap_content"
安卓:layout_height="wrap_content"
安卓:layout_below="@+id/TitreExtensionAccueil"
安卓:layout_centerVertical="true"
安卓:layout_marginLeft="20dp"
安卓:layout_marginTop="20dp"
安卓:textAppearance="?安卓:attr/textAppearanceMedium" />
<TextView
安卓:id="@+id/NombreCarteAccueil"
安卓:layout_width="wrap_content"
安卓:layout_height="wrap_content"
安卓:layout_below="@+id/DateSortieAccueil"
安卓:layout_centerVertical="true"
安卓:layout_marginLeft="20dp"
安卓:layout_marginTop="20dp"
安卓:textAppearance="?安卓:attr/textAppearanceMedium" />
<TextView
安卓:id="@+id/DescriptionExtensionAccueil"
安卓:layout_width="wrap_content"
安卓:layout_height="wrap_content"
安卓:layout_below="@+id/NombreCarteAccueil"
安卓:layout_centerVertical="true"
安卓:layout_marginLeft="20dp"
安卓:layout_marginTop="20dp"
安卓:textAppearance="?安卓:attr/textAppearanceMedium" />
<TextView
安卓:id="@+id/RareteCarteAccueil"
安卓:layout_width="wrap_content"
安卓:layout_height="wrap_content"
安卓:layout_below="@+id/DescriptionExtensionAccueil"
安卓:layout_centerVertical="true"
安卓:layout_marginLeft="20dp"
安卓:layout_marginTop="20dp"
安卓:textAppearance="?安卓:attr/textAppearanceMedium" />
<TextView
安卓:id="@+id/DetailExtensionAccueil"
安卓:layout_width="wrap_content"
安卓:layout_height="wrap_content"
安卓:layout_below="@+id/RareteCarteAccueil"
安卓:layout_centerVertical="true"
安卓:layout_marginLeft="20dp"
安卓:layout_marginTop="20dp"
安卓:textAppearance="?安卓:attr/textAppearanceMedium" />
</RelativeLayout>
下面是我如何尝试在我的MainActivity的OnCreate中更改TextView的内容:
CustomCardAccueil.TitreExtensionAccueil.setText("Test");
还有一个错误,我在坠机日志中得到:
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void 安卓.widget.TextView.setText.setText(java.lang.CharSequence)' on a null object reference
我不理解错误,因为对象已启动(如果我错了,请纠正我)。 此外,如果我尝试更改子类(CustomCardAccueil)中的文本,这是成功的,但我需要通过我的MainActivity来完成
感谢您的帮助,提前谢谢
# 1 楼答案
当你试图设置文本时,你的TitreExtensionAccueil被认为是空的。 你可能想指出CustomCardAccueil在哪里。TitreExtensionAccueil。setText(“测试”);要求更好地回答您的问题
# 2 楼答案
您的问题是,或者您没有使用类
CustomCardAccueil
的正确实例,因为您通过它声明并初始化了TextView
,因此,即使您必须从类中创建一个实例,或者将TextView
声明为static
变量,但在尝试设置TextView
值之前,请确保运行名为setupInnerViewElements()
的方法更新:
要通过某些布局获取当前窗口视图,请执行以下操作:
然后,将该
view
传递给方法setupInnerViewElements()
,只需使用它而不是使用ViewGroup
创建视图:在您的主要活动中:
在
setupInnerViewElements()
方法中:# 3 楼答案
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText.setText(java.lang.CharSequence)' on a null object reference
显示您在null对象上调用了
setText()
,那么您初始化了CustomCardAccueil.TitreExtensionAccueil
了吗# 4 楼答案
我通过查看卡片库和他的设置标题库找到了答案(我不知道为什么我没有早点想到!)
在CustomCardAccueil类中,我创建了如下字符串:
下面是getter和setter方法:
同样,在CustomCardAccueil中,在setupInnerViewElements方法中,我将:
在我的主要活动中,我简单地用以下方式称呼我的设定者:
就这么简单
# 5 楼答案
您需要使用以下内容初始化该类:
您可以使用
MyActivity.this
或getApplicationContext()
之类的内容从活动类获取上下文。然后可以使用类“setText
”之类的方法: