3

作成しているAndroidアプリのTextViewを動的に追加および削除しようとしていますが、TextViewのIDの設定と取得が困難になっています。コードの最後の2行(et.setTextとll.removeView)でnullポインター例外が発生しているようです。テキストビューの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 、次にそれを'slinl finalで使用できます(にレイアウトが含まれている限り。そうでない場合は、正確に何を達成したいかについていくつかの決定を行う必要があります-前にレイアウトを参照するとうまくいく可能性があります)。nTVOnClickListenerview

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は実際には必要ありません。

ただし、ビューを操作したい場合(非常に冗長な例ですが、説明のためです):

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

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