0

テーブルに動的に作成されたTableRowsがいくつかあります...各行には3つのTextviewsと、ユーザーが希望する場合に行を削除するための画像ボタンがあります...行の作成は成功しましたが、ユーザーがクリックすると問題が発生しますその行の削除ボタン。行が期待どおりに削除されません。これを達成するにはどうすればよいですか?

私のコードは以下の通りです

     public void addBody(String Code,String Type,String Quantity){
    /** Create a TableRow dynamically **/
     mTblrow = new TableRow(this);

    /** Creating a TextView to add to the row **/
    TextView label = new TextView(this);
    label.setText(Code);
    label.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT));          
    label.setPadding(5, 5, 5, 5);
    label.setBackgroundColor(Color.GRAY);

    LinearLayout Ll = new LinearLayout(this);
    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT);       
    params.setMargins(5, 5, 5, 5);

    Ll.addView(label,params);
    mTblrow.addView((View)Ll); // Adding textView to tablerow.

    /** Creating Qty Button **/
    TextView type = new TextView(this);
    type.setText(Type);
    type.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
    type.setPadding(5, 5, 5, 5);
    type.setBackgroundColor(Color.GRAY);

    Ll = new LinearLayout(this);
    params = new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT,
            LayoutParams.WRAP_CONTENT);
    params.setMargins(0, 5, 5, 5);
    Ll.addView(type,params);
    mTblrow.addView((View)Ll); // Adding textview to tablerow.

    /** Creating Qty Button **/
    TextView quantity = new TextView(this);
    quantity.setText(Quantity);
    quantity.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
    quantity.setPadding(5, 5, 5, 5);
    quantity.setBackgroundColor(Color.GRAY);

    Ll = new LinearLayout(this);
    params = new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT);

    params.setMargins(0, 5, 5, 5);
    Ll.addView(quantity,params);
    mTblrow.addView((View)Ll); 
    /** Creating Qty Button **/
    ImageView delete = new ImageView(this);
    delete.setImageDrawable(drawable);
    delete.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
    delete.setPadding(5, 5, 5, 5);

    Ll = new LinearLayout(this);
    params = new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT);

    params.setMargins(0, 5, 5, 5);
    Ll.addView(delete,params);
    mTblrow.addView((View)Ll); 


     // Add the TableRow to the TableLayout

    delete.setOnClickListener(new View.OnClickListener() {

        public void onClick(View v) {
            //This part should handle the logic to delete the row
            //This is where am hitting a snag..Please Help
            mTable.removeView(mTblrow);


        }
    });
    mTable.addView(mTblrow, new TableLayout.LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT));               

}

編集:代わりに、クリック時に以下のコードを使用してみました

   delete.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            ((ViewManager)mTblrow.getParent()).removeView(mTblrow);

            mTable.removeViewAt(rowIndex);          

        }
    });

ただし、削除するテーブル行に関係なく、行を上から下に削除するという点で、必要に応じて機能しません。常に上から下に開始します

4

1 に答える 1

1

ビュー階層を見ると、削除コードは次のようになります。

delete.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            mTable.removeViewAt(((View) ((View) v.getParent()).getParent()));          
        }
});

TableRowまた、追加する各ビューを別の役に立たないものにラップしないことをお勧めLinearLayoutします。

于 2012-10-19T17:09:35.853 に答える