我有很多可点击的textview /按钮。如果我必须键入:
,它只会使开发过程变得乏味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);
}
唉,它每次都会崩溃。我尝试这个。还有其他方法可以手动执行此操作(即输入每个单独的一个吗?
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)
答案 0 :(得分:1)
我认为你必须以编程方式使用创建Button / Textview
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)只是一次&amp;使用Id或标记访问Button / ToggleButton / textviews。
答案 1 :(得分:0)
for(int i=0; i< tvOutputArray.length-1;++)
你忘记了i ++;
for(int i=0; i< tvOutputArray.length-1;i++)
答案 2 :(得分: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);
}
}