5

このように、データベースから取得したレコードに応じて、クリック可能なテキストビューを動的に作成します。

DBAdapter db = new DBAdapter(this);

db.open();
Cursor c = db.getAllProfiles();
if(c.moveToFirst())
{
    do{
        TextView tv = new TextView(this);
        tv.setText(c.getString(1));
        tv.setTextSize(18);
        tv.setTextColor(Color.BLACK);
        tv.setClickable(true);
        tv.setPadding(0, 10, 0, 0);
        tv.setGravity(Gravity.CENTER);
        mainLayout.addView(tv);

        tv.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
        Toast.makeText(getBaseContext(), tv.getText().toString(), Toast.LENGTH_LONG).show();
            }
        });

    }while(c.moveToNext());
}
else
    Toast.makeText(getBaseContext(), "No Profiles", Toast.LENGTH_LONG).show();
db.close();

各texviewでクリックイベントを個別に設定するにはどうすればよいですか? 途中で、ループでクリック イベントを作成すると、すべてのテキストビューでクリック イベントがトリガーされる可能性があります。

*更新はすべてのループにイベントを追加しようとしましたが、次のエラーが発生しました:

「別のメソッドで定義された内部クラス内の非最終変数を参照することはできません」。

4

5 に答える 5

7

OnClickListener を TextView に追加するようにコードを変更します

TextView tv;
     if(c.moveToFirst())
            {
                do{
                    tv = new TextView(this);
                    tv.setText(c.getString(1));
                    tv.setTextSize(18);
                    tv.setTextColor(Color.BLACK);
                    tv.setClickable(true);
                    tv.setPadding(0, 10, 0, 0);
                    tv.setGravity(Gravity.CENTER);
                    tv.setOnClickListener(new View.OnClickListener() {

                    @Override
                    public void onClick(View v) {
                        // do you work here
                     }
                    });
                    mainLayout.addView(tv);

                }while(c.moveToNext());
            }
于 2012-12-10T09:45:55.630 に答える
4

これを使って

do{
                TextView tv = new TextView(this);
                tv.setText(c.getString(1));
                tv.setTextSize(18);
                tv.setTextColor(Color.BLACK);
                tv.setClickable(true);
                tv.setPadding(0, 10, 0, 0);
                tv.setGravity(Gravity.CENTER);
                tv.setId(1)
                tv.setOnClickListner(this);
                mainLayout.addView(tv);

            }while(c.moveToNext());

以下のようにonClickメソッドを配置します

    @Override
public void onClick(View v)
{
    if(v.getId()==1)
    {

        // do stuf here
    }
    }
于 2012-12-10T09:45:28.647 に答える
1

こうやって使う…

tv.setOnClickListener(new OnClickListener()
                    {

                        public void onClick(View voew) 
                        {
                             TableRow t = (TableRow) voew; //Your Layout
                              TextView firstTextView = (TextView) t.getChildAt(0);
                              String firstText = firstTextView.getText().toString();
                         }
                   });
于 2012-12-10T09:57:30.730 に答える
0

あなたがすべきよりもすべて大丈夫なら

これを試して

tv.setOnClickListener(new OnClickListener() {
                    public void onClick(View v) {
                Toast.makeText(getBaseContext(), ((TextView)v).getText().toString(), Toast.LENGTH_LONG).show();
                    }
                });

それが役立つことを願っています

于 2012-12-10T09:56:43.273 に答える
0

途中で、ループでクリック イベントを作成すると、すべてのテキストビューでクリック イベントがトリガーされる可能性があります。

=>それはどのように可能ですか?参考までに、クリック evnet コードは、クリック アクションがトリガーされた場合にのみ起動されます。いつものように割り当てるsetOnClickListenerことができます。

do {
 tv.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View v) {

    }
  });
} while(c.moveToNext())
于 2012-12-10T09:46:13.977 に答える