2012-01-30 19 views
0

テーブル内でmssqlから動的にデータを取得しています。選択した行の値をStringとして取得したい。たとえば、this画面の "99"、 "Yonca"、 "Lodi"の値を取得したいとします。これどうやってするの?ここに私の作成テーブルのコードは次のとおりです。Android - テーブル内の選択された行の値を取得する

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); 
    } 
} 
+0

これを見てくださいhttp://stackoverflow.com/questions/4079164/unable-to-select-children-textview-of-tablerow-programmatically –

+0

私はそれを試みましたが、私はできませんでした。私のコードを参照する簡単な例を教えてください。 – ugurrrrr

+0

値をクリックしたとき、またはonContextItemSelected()アイテムをクリックしたときに値を取得したいですか?正確には? –

答えて

1

これは汚いけど作業です。 registerForContextMenu(tr);呼び出しの前にTableRow tr1=null; は、あなたがあなたのaddData()方法 以内に次のコードを使用することができますと呼ばれるあなたのActivityクラス にグローバルプライベート変数を作成します。

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を使用すると言っていますか?

それはabitを明確にしたいと思う。

+0

大丈夫です..これは私が探しているものです。 – ugurrrrr

+0

喜んで助けてください。あなたのコンテキストメニューのContextMenuInfoのようなものを通常は扱うので、ListViewを使って自分のものをやることを本当に考えてください。 –

+0

私はAndroidで新しく、あなたの助言に気を配ります。もう一度ありがとう.. – ugurrrrr

1

それは、以下のリンクを参照してください、カスタムアダプタとのより良い使用のAndroidのListViewです.... http://www.vogella.de/articles/AndroidListView/article.html

+0

私はすでに私のプロジェクトでそれを使用しましたが、私はテーブルレイアウトでそれを行う必要があります。 – ugurrrrr

関連する問題