簡體   English   中英

在線性布局中添加視圖上的OnClicklistener

[英]OnClicklistener on a added View in a Linearlayout

這是我的問題:

我添加了一個ImageView到線性布局。 現在,我想為此圖像視圖設置一個OnClickListener。 但是沒有反應。 因此,我認為將視圖添加到布局時,偵聽器迷路了。

這是我的代碼:

    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。 我刪除了所有不相關的代碼,希望有人能幫助我;)

首先嘗試刪除條件檢查(v == a1),以查看事件是否被觸發。 在您的代碼中,您要靜態引用Row而不是實例的Row1 嘗試將視圖添加到Row1

在將ImageView添加到Layout之后設置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);

有空指針異常,因為

您已將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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM