0

クリック可能なテキストビュー/ボタンがたくさんあります。次のように入力する必要がある場合、開発プロセスが面倒になります。

OnCreate... etc, etc.
    tvOutput0.setOnClickListener(this);
    tvOutput1....
    tvOutput2.....
    ...
    tvOutput100.setOnClickListener(this)

forループを実装しようとしました

   tvOutputArray[] = {tvOutput0, tvOutput1,....TvOutput100}
   for(int i=0; i< tvOutputArray.length-1;i++){
         tvOutputArray[i].setOnClickListener(this);
   }

悲しいかな、それは毎回クラッシュします。私はこれを試みます。手動以外にこれを行う別の方法はありますか(つまり、すべてを1つずつ入力しますか?

  12-29 08:42:58.120: ERROR/StrictMode(597): null
    android.app.ServiceConnectionLeaked: Service com.android.exchange.ExchangeService        has leaked ServiceConnection com.android.emailcommon.service.ServiceProxy$ProxyConnection@40cd0fb0 that was originally       bound here
    at android.app.LoadedApk$ServiceDispatcher.<init>(LoadedApk.java:969)
    at android.app.LoadedApk.getServiceDispatcher(LoadedApk.java:863)
    at android.app.ContextImpl.bindService(ContextImpl.java:1418)
    at android.app.ContextImpl.bindService(ContextImpl.java:1407)
    at android.content.ContextWrapper.bindService(ContextWrapper.java:473)
    at com.android.emailcommon.service.ServiceProxy.setTask(ServiceProxy.java:157)
    at com.android.emailcommon.service.ServiceProxy.setTask(ServiceProxy.java:145)
    at com.android.emailcommon.service.ServiceProxy.test(ServiceProxy.java:191)
    at com.android.exchange.ExchangeService$7.run(ExchangeService.java:1850)
    at com.android.emailcommon.utility.Utility$2.doInBackground(Utility.java:551)
    at com.android.emailcommon.utility.Utility$2.doInBackground(Utility.java:549)
    at android.os.AsyncTask$2.call(AsyncTask.java:287)
    at java.util.concurrent.FutureTask.run(FutureTask.java:234)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
    at java.lang.Thread.run(Thread.java:856)
4

3 に答える 3

1

プログラムでボタン/テキストビューの作成を使用する必要があると思います

public class ActivityName extends Activity implements OnClickListener

{

 private static final int MY_BUTTON = 9000;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
 
        LinearLayout ll = (LinearLayout)findViewById(R.id.linearLayout2);
 
        // add text view
        TextView tv = new TextView(this);
        tv.setText("Dynamic Text!");
        ll.addView(tv);
 
        // add edit text
        EditText et = new EditText(this);
        et.setText("Dynamic EditText!");
        et.setMinLines(1);
        et.setMaxLines(3);
        ll.addView(et);
 
        // add button
        Button b = new Button(this);
        b.setText("Button added dynamically!");
        b.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
        b.setId(MY_BUTTON);
        b.setOnClickListener(this);
        ll.addView(b);
 
        //add checkboxes
        for(int i = 0; i < 10; i++) {
            CheckBox cb = new CheckBox(this);
            cb.setText("Dynamic Checkbox " + i);
            cb.setId(i+10);
            ll.addView(cb);
        }
 
        //add radio buttons
        final RadioButton[] rb = new RadioButton[5];
        RadioGroup rg = new RadioGroup(this); //create the RadioGroup
        rg.setOrientation(RadioGroup.HORIZONTAL);//or RadioGroup.VERTICAL
        for(int i=0; i<5; i++){
            rb[i]  = new RadioButton(this);
            rb[i].setText("Dynamic Radio Button " + i);
            rb[i].setId(i);
            rg.addView(rb[i]); //the RadioButtons are added to the radioGroup instead of the layout
 
        }
        ll.addView(rg);//you add the whole RadioGroup to the layout
        
        // add Toggle button
        ToggleButton tb = new ToggleButton(this);
        tb.setTextOn("Dynamic Toggle Button - ON");
        tb.setTextOff("Dynamic Toggle Button - OFF");
        tb.setChecked(true);
        tb.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
        ll.addView(tb);
 
    }
    
    public void onClick(View v) {
        Toast toast;
        Log.w("ANDROID DYNAMIC VIEWS:", "View Id: " + v.getId());
        switch (v.getId()) {
        case MY_BUTTON:
            toast = Toast.makeText(this, "Clicked on my dynamically added button!", Toast.LENGTH_LONG);
            toast.setGravity(Gravity.TOP, 25, 400);
            toast.show();
            saveAnswers();
            break;
            // More buttons go here (if any) ...
 
        }
    
  }
}

& b.setOnClickListener(this) を 1 回だけ使用します & Id またはタグを使用してボタン/トグルボタン/テキストビューにアクセスします。

于 2012-12-29T08:55:39.127 に答える
0
 for(int i=0; i< tvOutputArray.length-1;++)

あなたはi++を忘れました。

 for(int i=0; i< tvOutputArray.length-1;i++)
于 2012-12-29T08:38:48.723 に答える
0

私はあなたがこれをやろうとしていると思います:

// we need array of view's id
int [] viewIds = new int [] {R.id.tv1, R.id.tv2, R.id.bt1...};

// loop through ids, find view, set listener
for (int i = 0; i < viewIds.lenght; i++){
     View v = findViewById(viewIds[i]);
     if (v != null) {
         v.setOnClickListener(this);
     }
}
于 2012-12-29T08:53:59.607 に答える