在Linearlayout中添加的视图上的OnClicklistener

时间:2014-01-19 23:48:35

标签: android android-layout view android-linearlayout onclicklistener

这是我的问题:

我将ImageView添加到线性布局。现在我想为这个ImageView设置一个OnClickListener。但是没有反应。所以我认为当View添加到Layout时,Listener会丢失。

这是我的代码:

    public class MainActivity extends Activity implements OnClickListener{
        ImageView a1,a2;
        LinearLayout Row1;

        @Override
            protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main);
            FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(50, 50);
            LinearLayout Row1 = (LinearLayout)findViewById(R.id.Row1);
            ImageView a1 = new ImageView(this);
    ImageView a2 = new ImageView(this);
            a1.setImageResource(R.drawable.yellow);
    a2.setImageResource(R.drawable.yellow);
            a1.setOnClickListener(this);
    a2.setOnClickListener(this);
            Row1.addView(a1, params);
    Row1.addView(a2, params);
        }

        @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub

                if (v.getId() == a1.getId()){
                    Status.setText("A1 clicked");
                }
if (v.getId() == a2.getId()){
                    Status.setText("A2 clicked");
                }
    }
        }

现在,当我点击a1时,我得到一个NullPointerException。 我删除了所有不相关的代码,我希望有人可以帮助我;)

3 个答案:

答案 0 :(得分:0)

首先尝试删除条件检查(v == a1)以查看该事件是否正在被触发。在您的代码中,您对实例的而不是 Row1 进行静态引用。尝试将视图添加到 Row1

答案 1 :(得分:0)

将ImageView添加到Layout.Like:

后设置onClickListener()
ImageView a1 = new ImageView(this);
ImageView a2 = new ImageView(this);
a1.setImageResource(R.drawable.yellow);
a2.setImageResource(R.drawable.yellow);
Row1.addView(a1, params);
Row1.addView(a2, params);
a1.setOnClickListener(this);
a2.setOnClickListener(this);

答案 2 :(得分:0)

你有 空指针异常 ,因为

您已将 LinearLayout 声明为

LinearLayout Row1;

然后在oncreate()方法上再次通过

声明它
LinearLayout Row1 = (LinearLayout)findViewById(R.id.Row1);

所以在这方面会有冲突

Row1.addView(a1, params);
Row1.addView(a2, params);

所以只需从

更改此内容即可
LinearLayout Row1 = (LinearLayout)findViewById(R.id.Row1);

Row1 = (LinearLayout)findViewById(R.id.Row1);

还有这个

Row1.addView(a1, params);
Row1.addView(a2, params);
a1.setOnClickListener(this);
a2.setOnClickListener(this);