Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/222.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在动态创建的元素上添加onClick侦听器无效_Java_Android - Fatal编程技术网

Java 在动态创建的元素上添加onClick侦听器无效

Java 在动态创建的元素上添加onClick侦听器无效,java,android,Java,Android,我正在运行时创建动态textview。在添加onClick()Listener时。它只在运行时创建的最后一个textview上起作用,而不是在创建的每个textview上起作用。 这是我的代码:- @Override public void onComplete(@NonNull Task<Object> task) { if (task.isComplete()) { ArrayList<Document> tagLocat = (ArrayLi

我正在运行时创建动态
textview
。在添加
onClick()
Listener时。它只在运行时创建的最后一个
textview
上起作用,而不是在创建的每个
textview
上起作用。 这是我的代码:-

@Override
public void onComplete(@NonNull Task<Object> task) {
    if (task.isComplete()) {
        ArrayList<Document> tagLocat = (ArrayList<Document>) task.getResult();
        tv=new TextView[tagLocat.size()];

            for (i = 0; i < tagLocat.size(); i++) {
            Document doc = tagLocat.get(i);
            TextView tv1 = new TextView(MainActivity.this);
            Log.i("Document", "" + doc);
             notification = doc.getString("notification");
            Log.i("Double", "" + notification);
            LinearLayout.LayoutParams lparams = new LinearLayout.LayoutParams(
                    LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);

            lparams.setMargins(10,10,10,10);
            tv1.setLayoutParams(lparams);
            tv1.setTag(i);
            tv1.setId(i);
            tv1.setTextSize(30);
            tv1.setPadding(50, 0 ,0,0);

            tv1.setText(notification);
            tv[i] = tv1;
            linearLayout.addView(tv[i]);

           tv[i].setBackgroundColor(Color.GRAY);

            tv[i].setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    tv[i].setBackgroundColor(Color.LTGRAY);
                }
            });
        }
    } else {
        Log.i("Exception",task.getException().toString());
    }
}
@覆盖
未完成的公共void(@NonNull任务){
if(task.isComplete()){
ArrayList tagLocat=(ArrayList)task.getResult();
tv=新文本视图[tagLocat.size()];
对于(i=0;i
在设置onclicklistener之后,必须在数组中添加textview


在添加视图之前,设置
onClickListener

解决方案:-

 for (int i = 0; i < tagLocat.size(); i++) {
        // Do stuff here
        tv[i].setBackgroundColor(Color.GRAY);
        tv[i].setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                v.setBackgroundColor(Color.LTGRAY);
            }
        });
        tv[i] = tv1;
        linearLayout.addView(tv[i]);

    }
for(int i=0;i

确保这不会切换颜色
onClick()
。如果您想要这种行为,您需要保持
TextView

的状态,您正在更改视图的引用,这就是onClick不工作的原因。下面的两个答案都是正确的,检查一下这对我来说非常有效…谢谢你的帮助@Rajathe代码甚至可以与全局变量一起工作..感谢您的帮助@行政
 for (int i = 0; i < tagLocat.size(); i++) {
        // Do stuff here
        tv[i].setBackgroundColor(Color.GRAY);
        tv[i].setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                v.setBackgroundColor(Color.LTGRAY);
            }
        });
        tv[i] = tv1;
        linearLayout.addView(tv[i]);

    }