在android中的linearlayout中找出哪个视图在多个布局中触摸?

时间:2013-04-12 10:12:21

标签: android android-layout

我必须使用Java动态创建布局。

我已经动态创建了9个线性布局,如下所示:

for (int i=0;i<10;i++)
{
    Element e = (Element) nl.item(i);
    cpName = parser.getValue(e,"coverpage");    
    System.out.println("coverpage name :" + cpName);

    LinearLayout lbottomLayoutu1=new LinearLayout(getApplicationContext());
    lbottomLayoutu1.setGravity(Gravity.CENTER);
    LinearLayout.LayoutParams layoutParams1u1= new LinearLayout.LayoutParams(width,height/4);
    layoutParams1u1.weight=1.0f;    
    lbottomLayoutu1.setLayoutParams(layoutParams1u1);
    lbottomLayoutu1.setBackgroundColor(Color.RED);
    lbottomLayoutu1.setBackgroundResource(R.drawable.image);
    linearLayout.addView(lbottomLayoutu1);

    ImageView iv1=new ImageView(getApplicationContext());
    LinearLayout.LayoutParams layoutParams= new LinearLayout.LayoutParams(width/4,height/4);
    iv1.setLayoutParams(layoutParams);
    iv1.setImageResource(R.drawable.coverpage3);
    lbottomLayoutu1.addView(iv1);

    lbottomLayoutu1.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            System.out.println("Calling coverpage");
            String Url = WebUrl+cpName;
            System.out.println("web Url: " + Url);
            Intent in = new Intent(getApplicationContext(),CurlActivity.class);
            Bundle bundle = new Bundle();
            bundle.putString("Image Url",Url);
            in.putExtras(bundle);
            startActivity(in);
        }
    });
    setContentView(linearLayout);
}

我为每个布局都设置了触摸事件。但是,如果我触摸任何布局,我怎么知道哪个布局正在触摸?

3 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

您需要将每个布局的ID设置为

    obj.setId(i)

因此,在触摸事件中,您可以使用

识别它
    int id=obj.getId()

并相应地开展工作!

答案 2 :(得分:0)

如果您为视图实现OnClickListener,就像您一样......

lbottomLayoutu1.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View v) {
        // ...
    }
}

...参数View v告诉您触摸了哪个布局。然后,您可以将其转换为预期的布局,例如:

LinearLayout clickedLayout = (LinearLayout) v;

这将是已点击的布局。

但是,如果您想知道循环中使用的索引,则必须覆盖LinearLayout并为其提供包含索引的成员。然后,您可以将其强制转换为自定义LinearLayout类并获取索引。 (如果您需要更多帮助,请在评论中告诉我们。)