实现onClick侦听器到多个子布局

时间:2017-09-15 12:11:18

标签: android

我有一个Android XML结构如下。我想在点击子布局或其内容(TextView或图像)时,需要将clickListener转换为someAction。问题是布局是随机生成的,并且太多而无法单独使用点击监听器。

解决此问题的最佳方法是什么?到目前为止,我已将子布局设置为setClickable(true),将子级设置为setClickable(false)

        //MainLayoutContaining multiple children
        <Layout 1 >
            //This Layouts here are randomly generated programatically
            <Layout Child 1>
                <Textview />
                <ImageView />
                <Textview />
            </Layout Child 1>
            <Layout Child 2>
                <Textview />
                <ImageView />
                <Textview />
            </Layout Child 3>
                .
                .
                .
                .
            //End of Child Layouts
        </Layout 1>

被修改 我有这样的循环

        for(int i=0;i<newsFeedArray.length(); i++){
            LinearLayout a = new LinearLayout(getApplicationContext());
            a.setOrientation(LinearLayout.VERTICAL);
            a.setClickable(true);
            a.setOnClickListener(myListener);//New Code From Answer

            articleTitle.setText(articleItemTitle.toUpperCase());
            articleTitle.setClickable(false);   

            TextView articleBody = new TextView(getApplicationContext());
            articleBody.setText(html2text(articleItemIntrotext));
            articleBody.setClickable(false);

            a.addView(articleTitle);
            a.addView(articleImage);
            a.addView(articleBody);
        }

我现在能够检测每个布局的onClick。现在我想要的是检测被点击的子布局的ID。

1 个答案:

答案 0 :(得分:4)

编写一个实现MyClickListener的类OnClickListener并在onClick方法中处理您的调用,例如:

public class MyClickListener implements OnClickListener{

    @Override
    public void onClick(View v){
        if(v instance of TextView)
        // do what you want with textview
        // or another apporach 
        // detect which id had been clicked from your views 
    }
}

然后在您的活动代码中将onClickListener设置为MyClickListener

MyClickListener myListener = new MyClickListener();
someView.setOnClickListener(myListener);

对代码进行一些调整,这应该有效。

@LunarWatcher建议的另一种方法是在同一个类中,您可以直接实现OnClickListener接口并在其中添加onClick()方法。这两种方式都有效。