Java 在while循环中设置OnClickListener?
我尝试在while循环中设置onClickListner,如下所示:Java 在while循环中设置OnClickListener?,java,android,while-loop,textview,android-linearlayout,Java,Android,While Loop,Textview,Android Linearlayout,我尝试在while循环中设置onClickListner,如下所示: View inflaterLayout; LinearLayout myLayout = (LinearLayout)findViewById(R.id.linearLayout2); while (counter < 5) { inflaterLayout = LayoutInflater.from(getBaseContext()).inflate(R.layout
View inflaterLayout;
LinearLayout myLayout = (LinearLayout)findViewById(R.id.linearLayout2);
while (counter < 5) {
inflaterLayout = LayoutInflater.from(getBaseContext()).inflate(R.layout.newplayerlayout, null);
myLayout.addView(inflaterLayout);
Button testButton = (Button) myLayout.findViewById(R.id.button2);
testButton.setId(testButtonArray[counter]);
((TextView) myLayout.findViewById(R.id.textView1)).setId(testTextArray[counter]);
testButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
((TextView) findViewById(testTextArray[counter])).setText("Hi!");
}
});
counter++;
}
OnClickListener mListener = new OnClickListener() {
public void onClick(View view) {
TextView text = (TextView) view.getTag();
if(((Button) view).getText().equals("+"))
text.setText(Integer.parseInt(text.getText().toString()) + 1 + "");
else
text.setText(Integer.parseInt(text.getText().toString()) - 1 + "");
}
};
...
while (counter < 5) {
inflaterLayout = LayoutInflater.from(getBaseContext()).inflate(R.layout.newplayerlayout, null);
myLayout.addView(inflaterLayout);
TextView inflatedText = (TextView) inflaterLayout.findViewById(R.id.text);
Button testButton = (Button) inflaterLayout.findViewById(R.id.plus);
testButton.setTag(inflatedText);
testButton.setText("+");
testButton.setOnClickListener(mListener);
testButton = (Button) inflaterLayout.findViewById(R.id.minus);
testButton.setTag(inflatedText);
testButton.setText("-");
testButton.setOnClickListener(mListener);
counter++;
}
查看充气装置布局;
LinearLayout myLayout=(LinearLayout)findViewById(R.id.linearLayout2);
while(计数器<5){
充气布局=LayoutInflater.from(getBaseContext()).flate(R.layout.newplayerlayout,null);
myLayout.addView(充气布局);
Button testButton=(Button)myLayout.findViewById(R.id.button2);
setId(testButtonArray[counter]);
((TextView)myLayout.findViewById(R.id.textView1)).setId(testTextArray[counter]);
testButton.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
//TODO自动生成的方法存根
((TextView)findviewbyd(testTextArray[counter]).setText(“嗨!”);
}
});
计数器++;
}
我认为它会做的是,当你点击任何一个测试按钮时,它会改变它旁边的文本视图!但只有充气的第一个按钮才能工作!有人知道我做错了什么吗
基本上,我试图完成的是,我正在膨胀一个布局,它有一个加号按钮、减号按钮和一个文本视图,所以我希望能够设置一个onClickListener,它可以在文本视图中进行加号和减号,而不必设置一百万个单独的onClickListener 试试这个:
View inflaterLayout;
LinearLayout myLayout = (LinearLayout)findViewById(R.id.linearLayout2);
while (counter < 5) {
inflaterLayout = LayoutInflater.from(getBaseContext()).inflate(R.layout.newplayerlayout, null);
myLayout.addView(inflaterLayout);
Button testButton = (Button) myLayout.findViewById(R.id.button2);
testButton.setId(testButtonArray[counter]);
((TextView) myLayout.findViewById(R.id.textView1)).setId(testTextArray[counter]);
testButton.setOnClickListener(btnhandler); // Click Listener here
counter++;
}
试试这个:
View inflaterLayout;
LinearLayout myLayout = (LinearLayout)findViewById(R.id.linearLayout2);
while (counter < 5) {
inflaterLayout = LayoutInflater.from(getBaseContext()).inflate(R.layout.newplayerlayout, null);
myLayout.addView(inflaterLayout);
Button testButton = (Button) myLayout.findViewById(R.id.button2);
testButton.setId(testButtonArray[counter]);
((TextView) myLayout.findViewById(R.id.textView1)).setId(testTextArray[counter]);
testButton.setOnClickListener(btnhandler); // Click Listener here
counter++;
}
单击按钮时,将运行onClick函数中的代码。它不记得循环每次迭代期间的变量值,只是因为它在不同的范围内
更新
下面的代码仅使用一个OnClickListener来递增或递减每个对应TextView的值。你应该能够很容易地适应你的布局与一个更好的布局充气机
public class Example extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
LinearLayout layout = new LinearLayout(this);
layout.setOrientation(LinearLayout.VERTICAL);
OnClickListener listener = new OnClickListener() {
public void onClick(View view) {
TextView text = (TextView) view.getTag();
if(((Button) view).getText().equals("+"))
text.setText(Integer.parseInt(text.getText().toString()) + 1 + "");
else
text.setText(Integer.parseInt(text.getText().toString()) - 1 + "");
}
};
for(int i = 0; i < 5; i++) {
LinearLayout line = new LinearLayout(this);
line.setOrientation(LinearLayout.HORIZONTAL);
TextView text = new TextView(this);
text.setText(i + "");
line.addView(text);
Button plus = new Button(this);
plus.setTag(text);
plus.setText("+");
plus.setOnClickListener(listener);
line.addView(plus);
Button minus = new Button(this);
minus.setTag(text);
minus.setText("-");
minus.setOnClickListener(listener);
line.addView(minus);
layout.addView(line);
}
setContentView(layout);
}
}
公共类示例扩展活动{
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
LinearLayout布局=新的LinearLayout(本);
布局。设置方向(线性布局。垂直);
OnClickListener=新的OnClickListener(){
公共void onClick(视图){
TextView text=(TextView)view.getTag();
if(((按钮)视图).getText()等于(“+”)
text.setText(Integer.parseInt(text.getText().toString())+1+“”);
其他的
text.setText(Integer.parseInt(text.getText().toString())-1+“”);
}
};
对于(int i=0;i<5;i++){
LinearLayout line=新的LinearLayout(本);
直线.设置方向(直线布局.水平);
TextView text=新的TextView(此);
text.setText(i+“”);
line.addView(文本);
按钮+=新按钮(此按钮);
plus.setTag(文本);
加上.setText(“+”);
plus.setOnClickListener(listener);
line.addView(plus);
按钮减号=新按钮(此按钮);
减.setTag(文本);
减.setText(“-”);
减.setOnClickListener(listener);
line.addView(减);
布局。添加视图(行);
}
setContentView(布局);
}
}
从评论中添加内容
我假设在newplayerlayout.xml中有两个按钮(id为:“plus”和“minus”)和一个文本视图(id为“text”)。也许你会这样实施这个计划:
View inflaterLayout;
LinearLayout myLayout = (LinearLayout)findViewById(R.id.linearLayout2);
while (counter < 5) {
inflaterLayout = LayoutInflater.from(getBaseContext()).inflate(R.layout.newplayerlayout, null);
myLayout.addView(inflaterLayout);
Button testButton = (Button) myLayout.findViewById(R.id.button2);
testButton.setId(testButtonArray[counter]);
((TextView) myLayout.findViewById(R.id.textView1)).setId(testTextArray[counter]);
testButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
((TextView) findViewById(testTextArray[counter])).setText("Hi!");
}
});
counter++;
}
OnClickListener mListener = new OnClickListener() {
public void onClick(View view) {
TextView text = (TextView) view.getTag();
if(((Button) view).getText().equals("+"))
text.setText(Integer.parseInt(text.getText().toString()) + 1 + "");
else
text.setText(Integer.parseInt(text.getText().toString()) - 1 + "");
}
};
...
while (counter < 5) {
inflaterLayout = LayoutInflater.from(getBaseContext()).inflate(R.layout.newplayerlayout, null);
myLayout.addView(inflaterLayout);
TextView inflatedText = (TextView) inflaterLayout.findViewById(R.id.text);
Button testButton = (Button) inflaterLayout.findViewById(R.id.plus);
testButton.setTag(inflatedText);
testButton.setText("+");
testButton.setOnClickListener(mListener);
testButton = (Button) inflaterLayout.findViewById(R.id.minus);
testButton.setTag(inflatedText);
testButton.setText("-");
testButton.setOnClickListener(mListener);
counter++;
}
OnClickListener mListener=new OnClickListener(){
公共void onClick(视图){
TextView text=(TextView)view.getTag();
if(((按钮)视图).getText()等于(“+”)
text.setText(Integer.parseInt(text.getText().toString())+1+“”);
其他的
text.setText(Integer.parseInt(text.getText().toString())-1+“”);
}
};
...
while(计数器<5){
充气布局=LayoutInflater.from(getBaseContext()).flate(R.layout.newplayerlayout,null);
myLayout.addView(充气布局);
TextView充气文本=(TextView)充气布局.findViewById(R.id.text);
按钮testButton=(按钮)充气布局。findViewById(R.id.plus);
testButton.setTag(充气文本);
testButton.setText(“+”);
testButton.setOnClickListener(MLListener);
testButton=(按钮)充气布局.findViewById(R.id.减号);
testButton.setTag(充气文本);
testButton.setText(“-”);
testButton.setOnClickListener(MLListener);
计数器++;
}
单击按钮时,将运行onClick函数中的代码。它不记得循环每次迭代期间的变量值,只是因为它在不同的范围内
更新
下面的代码仅使用一个OnClickListener来递增或递减每个对应TextView的值。你应该能够很容易地适应你的布局与一个更好的布局充气机
public class Example extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
LinearLayout layout = new LinearLayout(this);
layout.setOrientation(LinearLayout.VERTICAL);
OnClickListener listener = new OnClickListener() {
public void onClick(View view) {
TextView text = (TextView) view.getTag();
if(((Button) view).getText().equals("+"))
text.setText(Integer.parseInt(text.getText().toString()) + 1 + "");
else
text.setText(Integer.parseInt(text.getText().toString()) - 1 + "");
}
};
for(int i = 0; i < 5; i++) {
LinearLayout line = new LinearLayout(this);
line.setOrientation(LinearLayout.HORIZONTAL);
TextView text = new TextView(this);
text.setText(i + "");
line.addView(text);
Button plus = new Button(this);
plus.setTag(text);
plus.setText("+");
plus.setOnClickListener(listener);
line.addView(plus);
Button minus = new Button(this);
minus.setTag(text);
minus.setText("-");
minus.setOnClickListener(listener);
line.addView(minus);
layout.addView(line);
}
setContentView(layout);
}
}
公共类示例扩展活动{
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
LinearLayout布局=新的LinearLayout(本);
布局。设置方向(线性布局。垂直);
OnClickListener=新的OnClickListener(){
公共void onClick(视图){
TextView text=(TextView)view.getTag();
if(((按钮)视图).getText()等于(“+”)
text.setText(Integer.parseInt(text.getText().toString())+1+“”);
其他的
text.setText(Integer.parseInt(text.getText().toString())-1+“”);
}
};
对于(int i=0;i<5;i++){
LinearLayout line=新的LinearLayout(本);
直线.设置方向(直线布局.水平);
TextView text=新的TextView(此);
文本。