Android - получение выбранных значений строк в таблице - PullRequest
0 голосов
/ 30 января 2012

Я получаю данные из mssql динамически в моей таблице.Я хочу получить значения в выбранной строке как String.Например, я хочу получить значения "99", "Yonca", "Lodi" для этого экрана.Как я могу это сделать?Вот мой код создания таблицы:

public void addData()
{
    for(int i = 0 ; i < protokolNo.length ; i++)
    {
        /**
         * Creating table row here
         */
        tr = new TableRow(this);
        tr.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT));

        tVProtokolNo = new TextView (this);
        tVProtokolNo.setText(protokolNo[i]);
        tVProtokolNo.setTextColor(Color.RED);
        tVProtokolNo.setTypeface(Typeface.DEFAULT, Typeface.BOLD);
        tVProtokolNo.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT));
        tVProtokolNo.setPadding(5, 5, 5, 5);
        tr.addView(tVProtokolNo);

        TextView tVAdi = new TextView(this);
        tVAdi.setText(adi[i]);
        tVAdi.setTextColor(Color.RED);
        tVAdi.setTypeface(Typeface.DEFAULT, Typeface.BOLD);
        tVAdi.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT));
        tVAdi.setPadding(5, 5, 5, 5);
        tr.addView(tVAdi);

        TextView tVSoyadi = new TextView(this);
        tVSoyadi.setText(soyadi[i]);
        tVSoyadi.setTextColor(Color.RED);
        tVSoyadi.setTypeface(Typeface.DEFAULT, Typeface.BOLD);
        tVSoyadi.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT));
        tVSoyadi.setPadding(5, 5, 5, 5);
        tr.addView(tVSoyadi);

        tl.addView(tr, new TableLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));

        /**
         *  Colouring selected row
         */

        tr.setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View v) {
                    v.setBackgroundColor(Color.DKGRAY);
                    v.showContextMenu();


                }
            });
            registerForContextMenu(tr);
    }
}

Ответы [ 2 ]

1 голос
/ 06 февраля 2012

Это грязно, но работает. Создайте глобальную частную переменную в вашем классе Activity называется TableRow tr1=null; тогда вы можете использовать следующий код в вашем addData() методе до registerForContextMenu(tr); звоните:

   tr.setOnClickListener(new View.OnClickListener() {
    public void onClick(View view) {
        view.setBackgroundColor(Color.DKGRAY);
    }
    });

    tr.setOnLongClickListener(new View.OnLongClickListener() {
            public boolean onLongClick(View v) {
                tr1=(TableRow)v; //assign selected TableRow gobally
                openContextMenu(v);
                return true;
            }
        });

Затем используйте следующее в том же упражнении, чтобы оно работало с контекстными меню, насколько я понял из вашего кода:

  @Override
     public void onCreateContextMenu(ContextMenu menu, View v,ContextMenu.ContextMenuInfo menuInfo) {
     super.onCreateContextMenu(menu, v, menuInfo);
         menu.add(0, v.getId(), 0, "Do YourStuff");

     }
    @Override
       public boolean onContextItemSelected(MenuItem item) {
        int ccount= (tr1).getChildCount();
                          String[] str =new String[ccount];
                          for(int i=0;i<ccount;i++)
                          {
                              TextView tv =   (TextView)(((TableRow)tr1)).getChildAt(i);
                              str[i]=tv.getText().toString(); //set selected text data into the String array
                          }
                          Toast.makeText(ListActivity2.this,Arrays.toString(str), 2).show();
        return true;
    }

так что в основном переменная tr1 будет содержать выбранную вами TableRow.

Но сделайте, как все говорят, используйте ListView для таких задач, как эта, и просто используйте RelativeLayouts для строк или чего-либо еще.

надеюсь, это прояснит это.

1 голос
/ 30 января 2012

Лучше использовать Android ListView с пользовательским адаптером, см. Ссылку ниже ... http://www.vogella.de/articles/AndroidListView/article.html

...