2014-09-10 1 views
0

클릭 한 내용을 기반으로 TableRayout에서 TableRayout을 제거하려고합니다. 이 테이블 레이아웃은 SQLiteDatabase에서 채워집니다. 클릭 한 행의 ID를 설정하고 클릭 한 행을 삭제하려고했습니다. 그것은 한 번만, 더 많은 행을 삭제하려면 두 번째 제거 버튼을 클릭하면, 응용 프로그램이 중지되었습니다 근무하고 있습니다.- TableLayout에서 클릭 한 TableRow를 제거하는 방법

ID가 2 인 두 번째 행을 제거하면 ID가 3 인 세 번째 행이 두 번째 행이 삭제 될 때 행 ID가 2가되므로이 문제가 발생했다고 생각했습니다. TableLayout에서 선택한 행을 어떻게 제거 할 수 있습니까?

는 행을 삭제하는 내 방법입니다 :

btnRemove.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 

      try { 
       int rowIDs = tampRowID; 
       int SOUDetailNo = tampRowID + LastSOUDetail; 

       mytable.removeViewAt(tampRowID); 
       b.deleteSOUD(SOUDetailNo); 
       Toast.makeText(Order.this, "SOUploadDetail no "+ Integer.toString(SOUDetailNo) + " has been deleted", Toast.LENGTH_SHORT).show(); 
      } catch (NumberFormatException e) { 
       // TODO: handle exception 
       Toast.makeText(Order.this, "could not parse", Toast.LENGTH_SHORT).show(); 
      } 
     } 
    }); 
} 

그리고 나는 BuildTable() 메소드의 행 ID를 설정 : 다음과 같은 대답에 시도 할 수 있습니다

private void BuildTable() 
      { 
        int rowID = 0; 
        Cursor c = b.readAllSOUD(); 

        final int rows = c.getCount(); 
        int cols = c.getColumnCount(); 

        c.moveToPosition(c.getCount() - 1); 

        // outer for loop 
         final TableRow row = new TableRow(this); 
         row.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT)); 
         row.setClickable(true); 
         rowID++; 
         row.setId(rowID); 
         row.setBackgroundColor(Color.WHITE); 

        row.setOnClickListener(new View.OnClickListener() { 
          public void onClick(View view) { 

           tampRowID = row.getId(); 
         } 
         }); 


         // inner for loop 
         for (int j = 0; j < cols; j++) 
         { 
         TextView tv = new TextView(this); 

         tv.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, 
         LayoutParams.WRAP_CONTENT)); 
         //tv.setBackgroundResource(R.drawable.cell_shape); 

         tv.setGravity(Gravity.LEFT); 
         tv.setTextSize(12); 
         tv.setPadding(0, 5, 0, 5); 
         tv.setText(c.getString(j)); 
         //tv.setBackgroundColor(0x7C5B77); 
         row.addView(tv); 
         } 
         c.moveToNext(); 
         mytable.addView(row); 
      } 
+0

네, 약간의 의상과 함께 저도 잘합니다. 미리 감사드립니다 !! – Nes

+0

sory, 내 평판은 ur 대답을 upvote 충분하지 않습니다. – Nes

답변

0

.

public TableLayout mainTableLayout; 
private TableRow tableRow; 

mainTableLayout = (TableLayout) findViewById(R.id.mainTable); 
//when you click row item on the table show Menu dialog 
@Override 
public void onCreateContextMenu(ContextMenu menu, View v, 
     ContextMenuInfo menuInfo) { 
    super.onCreateContextMenu(menu, v, menuInfo); 
    if (((TableLayout) v.getParent()).getId() == mainTableLayout 
      .getId()) { 
     menu.setHeaderTitle("Options"); 
     menu.add(0, v.getId(), 0, "Delete"); 
    } else { 
     menu.setHeaderTitle("Options"); 
     menu.add(0, v.getId(), 0, "Delete"); 
    } 
    tableRow = (TableRow) v; 
} 

@Override 
public boolean onContextItemSelected(MenuItem item) { 
    if (item.getTitle() == "Delete") { 
     deleteFunction(item.getItemId()); 
     } else { 
     return false; 
    } 
    return true; 
}  


public void deleteFunction(int id) { 
    if (((TableLayout) tableRow.getParent()).equals(mainTableLayout)) { 
     mainTableLayout.removeView(tableRow); 
     try { 
      //what want something to do on the table column eg. for update column. 
     } catch (NullPointerException e) { 
      e.printStackTrace(); 
     } 
    } else { 

    } 
    Toast.makeText(this, "Successfully Deleted", Toast.LENGTH_SHORT).show(); 
} 
관련 문제