我有一个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。
答案 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()
方法。这两种方式都有效。