Java 在while循环中设置OnClickListener?

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

我尝试在while循环中设置onClickListner,如下所示:

    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(此);
文本。