1

だから私はいくつかのボタンを生成しました。数値はユーザーに依存します (ボタンをクリックすると、新しいボタンが作成されます)。

これは私がそれを作った方法です:

   RelativeLayout layout = (RelativeLayout) findViewById(R.id.layoutcprompt);
    RelativeLayout.LayoutParams OBJ = new RelativeLayout.LayoutParams (140,80);
    if ((commandsi%6)==0) {adjust=adjust+86; commandsi=1;}
    OBJ.leftMargin =(140*(commandsi-1))+10;
    OBJ.topMargin =250+adjust;
    Button command = new Button(this);
    command.setLayoutParams(OBJ);
    command.setId(ID);
    command.setText(edittxt.getText().toString());
    edittxt.setText("");
    command.setBackgroundResource(R.drawable.costum_button);
    command.setTextColor(Color.WHITE);
    command.setTextSize(14);
    layout.addView(command);
    command.setOnClickListener(new View.OnClickListener() {
        public void onClick(View view) {
            Button b = (Button)view;
            scommand=b.getText().toString();
        }
    });
    command.setVisibility(View.VISIBLE);

それらを削除/削除したいのですが、方法がわかりません....それらに一意のIDを付けましたが、それらを削除する方法がわかりません:/

4

6 に答える 6

3

別の投稿にコメントすることはできませんが、

command = new Button(this)

this!での暗黙的なメモリ リークが発生する可能性があります。(これは である可能性がありますActivity)。むしろContextオブジェクトを使用してください。または、少なくともボタンを削除します。

次に、 の親があるためですButton。それを削除するだけです:

ViewGroup layout = (ViewGroup) findViewById(R.id.layoutcprompt);
View command = layout.findViewById(ID);
layout.removeView(command);
于 2013-01-27T15:02:46.810 に答える
2

コマンドをグローバル変数にします。その後、後でアクセスして呼び出すことができますcommand.setVisibility(View.GONE);

したがって、クラス ファイルの先頭で、グローバル変数を宣言します。

Button command;

その後、後で再定義を削除し、代わりにグローバル変数に割り当てます。

command = new Button(this);

次に、非表示にする場合は、次のように呼び出します。

command.setVisibility(View.GONE);
于 2013-01-27T14:45:46.543 に答える
1

ドキュメントを使用してみてください。5 秒間の調査で、RemoveView メソッドにたどり着くことができます。

layout.removeView(command);

アップデート

この行にヌル ポインター例外がある場合は、あなたlayoutがヌルであることを意味し、あなたのものではありませんcommandlayoutそのクラスの変数をグローバルにします。

また、作成したボタンごとに異なる変数を保持してください。グローバル変数があり、同じ変数を使用して 10 個のボタンを作成した場合、最後に作成されたものへの参照しかありません。ボタンをいつ削除したいかを正確に説明していただければ、さらにサポートできる可能性があります。

例として、ユーザーがボタンをクリックしたときにボタンを削除したい場合は、clickListener を変更できます。

command.setOnClickListener(new View.OnClickListener() {
        public void onClick(View view) {
            Button b = (Button)view;
            scommand=b.getText().toString();
            layout.removeView(view);    
    }
    });
于 2013-01-27T14:45:55.627 に答える
1

このスレッドを表示している他のユーザーに役立つ可能性があるもう 1 つの実装は、親レイアウトのすべての子要素を削除することを検討できることです。ビューの親 (レイアウト コンテナーであると想定) を取得したら、すべての子要素を削除できます。

command.setOnClickListener(new View.OnClickListener() {
        public void onClick(View view) {
            ViewGroup vg = (ViewGroup)view.getParent();
            vg.removeAllViews();
    }
});
于 2014-10-26T09:23:07.627 に答える
0

セキュリティ上の目的で、次のようにすることもできます。

ViewGroup layout = (ViewGroup) command.getParent();
if(null!=layout) //for safety only  as you are doing onClick
layout.removeView(command);
于 2013-01-27T14:55:45.637 に答える
0

このスニーカーも使えます

ボタンを追加する場合

        LinearLayout dynamicview = (LinearLayout)findViewById(R.id.buttonlayout);
        LinearLayout.LayoutParams  lprams = new LinearLayout.LayoutParams(  LinearLayout.LayoutParams.WRAP_CONTENT,
            LinearLayout.LayoutParams.WRAP_CONTENT);

            Button btn = new Button(this);
            btn.setId(count);
            final int id_ = btn.getId();
            btn.setText("Capture Image" + id_);
            btn.setTextColor(Color.WHITE);
            btn.setBackgroundColor(Color.rgb(70, 80, 90));
            dynamicview.addView(btn, lprams);
            btn = ((Button) findViewById(id_));
            btn.setOnClickListener(this);

ボタンの取り外しに

            ViewGroup layout = (ViewGroup) findViewById(R.id.buttonlayout);
            View command = layout.findViewById(count);
            layout.removeView(command);
于 2015-06-15T11:55:05.430 に答える