如何获得一个动态创建的textview的ID?

问答小助手 2013-02-01 02:10:14
加精
原问题来自于CSDN问答频道,更多解决方案请看:http://ask.csdn.net/questions/1280

问题描述:

我想要在一个android app中动态添加和删除TextView,我现在正在做,但是我在设置和获得TextView的ID的时候碰到了困难。在最后两行代码中我好想得到了空指针异常(et settext和ll.removeView)。有人知道我怎么可以动态的设置和获得一个textview的ID么?setId似乎没有工作,还是就是我错了?

//删除无关的代码
EditText et = (EditText) view.findViewById(R.id.edittext_tags);
et.setText("");

TextView nTv = new TextView(view.getContext());
LayoutParams lparams = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);

lparams.setMargins(10, 0, 0, 0);
nTv.setLayoutParams(lparams);
nTv.setId(tag_id);
nTv.setText(str.substring(0, str.length()-1));
nTv.setTextColor(Color.BLUE);
nTv.setTextSize(20);
final LinearLayout linl = (LinearLayout) view.findViewById(R.id.linear_layout_tags);
linl.addView(nTv);

nTv.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {

EditText et = (EditText) view.findViewById(R.id.edittext_tags);
TextView t = ((TextView)v);
et.setText(t.getText().toString());
linl.removeView(v);

}
});



解决方案:

在layout中,TextView并不包含所有的children,但是LinearLayout有。最后,你可以在TextView的OnClickListener中用(只要视图包含layout。如果没有,可能你需要确定一下你想要做什么功能-提前做一个参考的布局可能会有效)

final LinearLayout linl = (LinearLayout) view.findViewById(R.id.linear_layout_tags);
linl.addView(nTv);

nTv.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
EditText et = (EditText) linl.findViewById(R.id.edittext_tags);
TextView t = ((TextView)v);
et.setText(t.getText().toString());
linl.removeView(v);
}



用你的方法的话,id并不是真的需要,因为你总是有一个引用的视图。

然后,如果你想要用views的话(非常冗余的例子,但是它可以解释的更清楚):

nTv.setId(tag_id);
linl.addView(nTv);

TextView duplicateTextViewReference (TextView) linl.findViewById (tag_id);
...全文
58641 51 打赏 收藏 转发到动态 举报
写回复
用AI写文章
51 条回复
切换为时间正序
请发表友善的回复…
发表回复
huoshenaoyu 2013-03-07
  • 打赏
  • 举报
回复
lhw7791086 2013-02-19
  • 打赏
  • 举报
回复
我是来学习的
shishuqiu 2013-02-19
  • 打赏
  • 举报
回复
非常值得学习,支持!
owuHuaRou1 2013-02-15
  • 打赏
  • 举报
回复
额。。。迷茫中
oKeXiLiao 2013-02-14
  • 打赏
  • 举报
回复
数码玩艺 2013-02-14
  • 打赏
  • 举报
回复
不错,感谢分享
asdasd456123 2013-02-11
  • 打赏
  • 举报
回复
支持下楼主
sunmy1688888 2013-02-09
  • 打赏
  • 举报
回复
不懂,过来学习的
oumaiguo 2013-02-07
  • 打赏
  • 举报
回复
才学来看看。
sxgghjx 2013-02-05
  • 打赏
  • 举报
回复
不错,支持顶一下
m1msun 2013-02-05
  • 打赏
  • 举报
回复
不会啊aaaaa
youhao1999 2013-02-05
  • 打赏
  • 举报
回复
路过帮顶。。。。
gmkeys 2013-02-05
  • 打赏
  • 举报
回复
该学习学习了
ylhsw0 2013-02-04
  • 打赏
  • 举报
回复
支持下,,,
txzsp 2013-02-04
  • 打赏
  • 举报
回复
fengbuer 2013-02-04
  • 打赏
  • 举报
回复
不会啊
nvkerr 2013-02-03
  • 打赏
  • 举报
回复
很好很强大、很好
tarena_1031 2013-02-03
  • 打赏
  • 举报
回复
不错,谢谢分享。
qaz123wsx123qaz123 2013-02-03
  • 打赏
  • 举报
回复
不错,不错,吧
mcldljt 2013-02-02
  • 打赏
  • 举报
回复
路过帮忙顶了
加载更多回复(17)
Android 即时添加textview、imageview内容项,适时动态添加这两个组件,实现时首先创建了所有资源图片(andy、bill、edgar、torvalds、turing)id的数组和所有资源字符串(andy、bill、edgar、torvalds、turing)id的数组,动态生成每个下拉项对应的View,每个下拉项View由LinearLayout中包含一个ImageView及一个TextView构成,然后为ListView设置内容适配器和设置选项被单击的监听器。以下代码或许对你有帮助:   LinearLayout ll=new LinearLayout(Sample_5_4.this);//初始化LinearLayout   ll.setOrientation(LinearLayout.HORIZONTAL); //设置朝向   ll.setPadding(5,5,5,5);//设置四周留白   ImageView ii=new ImageView(Sample_5_4.this);//初始化ImageView   ii.setImageDrawable(getResources().getDrawable(drawableIds[arg0]));//设置图片   ii.setScaleType(ImageView.ScaleType.FIT_XY);   ii.setLayoutParams(new Gallery.LayoutParams(100,98));   ll.addView(ii);//添加到LinearLayout中   TextView tv=new TextView(Sample_5_4.this);//初始化TextView   tv.setText(getResources().getText(msgIds[arg0]));//设置内容   tv.setTextSize(24);//设置字体大小   tv.setTextColor(Sample_5_4.this.getResources().getColor(R.color.white));//设置字体颜色   tv.setPadding(5,5,5,5);//设置四周留白    tv.setGravity(Gravity.LEFT);   ll.addView(tv);//添加到LinearLayout中   return ll;

80,359

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧