注意:由于我发现了自己的愚蠢,这个问题已经解决了
我想向LinearLayout
添加一个自定义类,但由于某种原因,我不断得到NullPointerException
.
以下是处理加法的方法:
protected void onPostExecute(String results) {
System.out.println("ON POST EXECUTE : " + results);
try {
if(!results.equals(((MessageBlurb)container.getChildAt(0)).getMessage())){
try {
container.removeViewAt(30);
for (int i = 29; i > 0; i--) {
container.addView(container.getChildAt(i-1), i);
container.removeViewAt(i-1);
}
container.addView(new MessageBlurb(getApplicationContext(), results, Color.BLACK), 0);
} catch (NullPointerException e) {
// TODO: handle exception
}
}
}
catch (Exception e) {
MessageBlurb mb = new MessageBlurb(getApplicationContext(), results, Color.BLACK);
mb.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
System.out.println(mb);
container.addView(mb, 0);
}
}
MessageBlurb
延伸ViewGroup
的地方,因为我在MessageBlurb
里面有一个TextView
。
MessageBlurb
类如下所示:
public MessageBlurb(Context context, String message, int color){
super(context);
myTV = new TextView(context);
this.addView(myTV);
myTV.setText(message);
System.out.println("THE BLURB IS CREATED");
this.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
System.out.println("YOU CLIKED THE BLURB");
}
});
}
我打印出了mb
的描述,它给了我一个记忆位置。除此之外,logcat错误指向以下行:
container.addView(mb, 0);
container
本身是在activity_main.xml
文件中定义的LinearLayout
。它通过代码行初始化:
container = (LinearLayout)findViewById(R.id.container);
xml 文件中布局的 id 也称为 container
有人能看到我做错了什么吗?谢谢!
我不是 100% 确定这是否是问题所在,但以下代码看起来只是在自找麻烦:
container.removeViewAt(30);
for (int i = 29; i > 0; i--) {
container.addView(container.getChildAt(i-1), i);
container.removeViewAt(i-1);
}
container.addView(new MessageBlurb(getApplicationContext(), results, Color.BLACK), 0);
看起来您正在尝试删除容器中的最后一个视图,并在顶部添加新的 MessageBlurb。但是您不需要像这样手动向下移动所有视图,只需在位置 0 处添加一个新视图即可为您完成所有这些工作。尝试将其替换为以下内容:
container.removeViewAt(30);
container.addView(new MessageBlurb(getApplicationContext(), results, Color.BLACK), 0);
另外,在创建消息简介时,您是否有充分的理由使用getApplicationContext()
?您的代码看起来像嵌套在 Activity 类中的 AsyncTask 类的一部分,因此您可以并且应该将活动本身作为上下文传递(即 new MessageBlurb(Activity.this, results, Color.BLACK)
或类似的东西)。
希望对您有所帮助!
事实证明,我是一个彻头彻尾的白痴。我浏览了我的onCreate(),发现我已经注释掉了这一行: setContentView(...)
即便如此,我还是要感谢所有回复此线程的人。很抱歉给您带来麻烦!:)