0

動的に作成されたテーブル行を削除しようとしていますが、正しいテーブル行 ID を取得できません。すべてのテーブル行に同じ ID があり、作成したものよりも多く、カウンターがより高い ID を設定し、すべての行がそれを取得します...助けていただければ幸いです。これで数日間立ち往生しています。私の方法は大きいですが、最初だけが重要だと思います。

 public void getRow(String klik, int brojkica)
{
    //db=openOrCreateDatabase(DATABASE_NAME, Context.MODE_PRIVATE, null);
    db = INF.getReadableDatabase();
    int count = 0;
    Cursor cursor3 = db.rawQuery("select id,Artikl, CIJENA from Artikli where");
    System.out.println(counterko);
    counterko++;
    tr = new TableRow(this);
    tr.setClickable(true);
    tr.setBackgroundColor(Color.GRAY);

    tr.setId(500 + counterko);

    cursor3.moveToFirst();
    final TextView sifracolumn = new TextView(this);
    sifracolumn.setId(1000 + counterko);

    sifracolumn.setPadding(5, 5, 5, 5);
    sifracolumn.setText(String.valueOf(cursor3.getInt(0)));
    sifracolumn.setGravity(Gravity.CENTER | Gravity.BOTTOM);
    sifracolumn.setTextColor(Color.BLACK);
    tr.addView(sifracolumn);
    allIDs.add(sifracolumn);//////////////////////////////////////

    final TextView artiklcolumn = new TextView(this);
    artiklcolumn.setPadding(5, 5, 5, 5);
    artiklcolumn.setId(2000 + counterko);
    artiklcolumn.setClickable(true);
    artiklcolumn.setWidth(400);
    artiklcolumn.setText(cursor3.getString(1));
    artiklcolumn.setGravity(Gravity.CENTER | Gravity.BOTTOM);
    artiklcolumn.setTextColor(Color.BLACK);
    tr.addView(artiklcolumn);
    artiklcolumn.setOnClickListener(new View.OnClickListener()
    {

        public void onClick(View v)
        {
            // TODO Auto-generated method stub
            //alert(tr.getId());
            alert(artiklcolumn.getId());
        }
    });
    final TextView cijenacolumn = new TextView(this);
    cijenacolumn.setId(3000 + count);
    cijenacolumn.setText(cursor3.getString(2));
    cijenacolumn.setWidth(120);
    cijenacolumn.setGravity(Gravity.CENTER | Gravity.BOTTOM);
    cijenacolumn.setTextColor(Color.BLACK);

    tr.addView(cijenacolumn);

    final EditText kolicinacolumn = new EditText(this);
    kolicinacolumn.setId(4000 + counterko);
    kolicinacolumn.setText("1");
    kolicinacolumn.setGravity(Gravity.CENTER | Gravity.BOTTOM);
    kolicinacolumn.setTextColor(Color.BLACK);

    allEds.add(kolicinacolumn);
    tr.addView(kolicinacolumn);

    final TextView iznoscolumn = new TextView(this);
    iznoscolumn.setId(5000 + counterko);
    iznoscolumn.setWidth(120);
    iznoscolumn.setText("");
    iznoscolumn.setTextColor(Color.BLACK);
    iznoscolumn.setGravity(Gravity.CENTER | Gravity.BOTTOM);
    tr.addView(iznoscolumn);
    allTexts.add(iznoscolumn);

    if (kolicinacolumn.getText().toString() == "1")
    {

        System.out.println("kme");
        iznoscolumn.setText(cijenacolumn.getText().toString());
    }
    zaplatiti();
    tl = (TableLayout) findViewById(R.id.tableLayout1);
    tl.addView(tr, new TableLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
    count++;
    kolicinacolumn.addTextChangedListener(new TextWatcher()
    {


        public void onTextChanged(CharSequence s, int start, int before, int count)
        {
            String kol = kolicinacolumn.getText().toString();
            if (TextUtils.isEmpty(kol))
            {
                try
                {
                    System.out.print("Stop it");
                } catch (NumberFormatException e)
                {
                    System.out.println("This is not a number");
                    System.out.println(e.getMessage());
                }
            } else
            {
                Float racunam = Float.valueOf(kol);
                Float racunam2 = Float.valueOf(cijenacolumn.getText().toString());
                Float reza = racunam * racunam2;
                iznoscolumn.setText(String.valueOf(reza));
            }
            zaplatiti();
        }

        public void afterTextChanged(Editable s)
        {
            // TODO Auto-generated method stub      
        }

        public void beforeTextChanged(CharSequence s, int start, int count, int after)
        {
            //TODO 
        }
    });
}
4

4 に答える 4

0

メソッドを使用.removeView()し、パラメーターとして、削除するテーブル行のインデックスを使用するか、一意のタグをテーブル行に追加して、後でこのタグに基づいて削除します。

于 2012-12-05T11:42:42.367 に答える
0

わかりました、私は私の問題を解決しました..最初の問題は

tr = new TableRow(this); 

ID がメソッドでインスタンス化されなかったため、テーブルの行に ID を割り当てることができませんでした。そのため、最初に行うことは

final TableRow tr = new TableRow(this);

次に、応答性を高めたい列にonclicklistenerを配置し、これを入れました..

 artiklcolumn.setOnClickListener(new View.OnClickListener(){
public void onClick(View v) {
TableRow km= (TableRow)findViewById(tr.getId());                
alert(km);

}

オブジェクトを取得し、アラートダイアログに送信し、そこからメソッドで削除します。

 public void delete(TableRow tr2){

 tl.removeView(tr2);       

 }
于 2012-12-06T08:59:53.747 に答える
0
for(int i = 0, j < table.getChildCount(); i < j; i++){
    TableRow row = (TableRow) getChildAt(i);
    if(you can check something here) {
        removeViewAt(i);
        // or...
        removeView(row);
    }
}
于 2012-12-05T12:49:05.550 に答える
0

すべての行のタグとして id も設定します。一意の行を削除するときは、.removeView(view.getTag()); を使用します。

于 2012-12-05T12:17:09.350 に答える