3

我正在尝试为我正在制作的 Android 应用程序动态添加和删除 TextView,但我在设置和获取 TextView 的 ID 时遇到了困难。对于最后两行代码(et.setText 和 ll.removeView),我似乎得到了空指针异常。有人对我如何动态设置和获取 textview 的 id 有任何建议吗?显然 .setId 似乎不起作用,或者更有可能是我做错了。

//surrounding non-relevant code removed
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);

    }
});
4

1 回答 1

1

TextView不包含布局中的所有子项,但确实LinearLayout如此。Make linl final,那么您可以在nTV's中使用它OnClickListener(只要view包含布局。如果没有,您将需要对您想要实现的目标做出一些决定 - 之前对布局进行引用可能会起作用)。

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,因为您总是有对 View 的引用。

但是,如果您想使用视图(非常多余的示例,但这是为了解释):

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

TextView duplicateTextViewReference (TextView) linl.findViewById (tag_id);
于 2013-01-29T03:30:18.597 回答