我有3个项目列表:
[image_1] [text_1]
[image_2] [text_2]
[image_3] [text_3]
我没有使用ListView。相反,我使用了RelativeLayout。
我如何处理TextView和ImageView的OnClickListener?
list_layout.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<ImageView
android:id="@+id/image_1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_marginLeft="21dp"
android:layout_marginTop="21dp"
android:src="@drawable/calbutton" />
<TextView
android:id="@+id/text_1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignTop="@+id/image_1"
android:layout_toRightOf="@+id/image_1"
android:text="TextView" />
<ImageView
android:id="@+id/image_2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBelow="@+id/image_1"
android:layout_below="@+id/image_1"
android:layout_marginLeft="21dp"
android:layout_marginTop="21dp"
android:src="@drawable/calbutton" />
<TextView
android:id="@+id/text_2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/text_1"
android:layout_alignTop="@+id/image_2"
android:text="TextView" />
<ImageView
android:id="@+id/image_3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBelow="@+id/image_2"
android:layout_below="@+id/image_2"
android:layout_marginLeft="21dp"
android:layout_marginTop="21dp"
android:src="@drawable/calbutton" />
<TextView
android:id="@+id/text_3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignTop="@+id/image_3"
android:layout_toRightOf="@+id/image_3"
android:text="TextView" />
</RelativeLayout>
答案 0 :(得分:5)
您可以为该父视图添加一个父视图,同时为该父视图添加单击侦听器,就像您可以将LinearLayout添加为父视图一样:
<LinearLayout android:id="@+id/firstparent">
<Imageview/>
<TextView/>
</LinearLayout>
<LinearLayout android:id="@+id/secondparent">
<Imageview/>
<TextView/>
</LinearLayout>
<LinearLayout android:id="@+id/thirdparent">
<Imageview/>
<TextView/>
</LinearLayout>
<LinearLayout android:id="@+id/forthparent">
<Imageview/>
<TextView/>
</LinearLayout>
现在将点击监听器设置为LinearLayout
,这样无论您是单击imageview还是textview,都可以获得相同的事件。
然后为每个布局注册onClickListner,如。
layout1.setOnClickListener(this);
layout2.setOnClickListener(this);
layout3.setOnClickListener(this);
layout4.setOnClickListener(this);
@Override
public void onClick ( View v )
{
if ( v == layout1 )
{
// your code...
}
else if(v == layout2){
// your code...
}
//// add others...
}
答案 1 :(得分:2)
将imageview
和textview
放在linear layout
内。然后覆盖onClickLListener
LinearLayout
<RelativeLayout ...... >
<LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content"
android:orientation="vertical" >
<ImageView
android:id="@+id/image_1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_marginLeft="21dp"
android:layout_marginTop="21dp"
android:src="@drawable/calbutton" />
<TextView
android:id="@+id/text_1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignTop="@+id/image_1"
android:layout_toRightOf="@+id/image_1"
android:text="TextView" />
</LinearLyaout>
.......
</RelativeLayout>
答案 2 :(得分:2)
对于ListView
,您可以添加一个onItemClickListener
,该行将在该行的任何位置进行单击调用。
答案 3 :(得分:1)
只需将OnClickListener()
实现为您的java文件,如beflow,
public yourClassName extends Activity implements OnClickListener
{
....your code
// register for onClickListener
text1.setOnClickListener(this);
// register same for other textboxes & imageview.
@Override
public void onClick ( View view )
{
if ( view == text1 ) // assuming text1 is your text_1 of your .xml file
{
// do stuff
}
...
// same for other textboxes & image view.
}
}
答案 4 :(得分:1)
只需对所有文字视图和图像视图使用OnClickListeners,就像这样
findViewById(R.id.image_1).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
////// write your code here
}
});
答案 5 :(得分:0)
如果您希望每个View对一个处理程序执行不同的操作,则可以执行以下操作:
TextView tv;
ImageView iv;
View.OnClickListener myOnlyhandler = new View.OnClickListener() {
public void onClick(View v) {
if( tv.getId() == ((TextView)v).getId() ){
// it was the textview
}
else if(iv.getId() == ((ImageView)v).getId() ){
// it was the imageview
}
}
}
或者,如果要将两个视图组合在一起,请将它们放在容器中(例如RelativeLayout,LinearLayout等),并将OnClickListener分配给容器。
答案 6 :(得分:0)
这是代码
TextView tv[] = new TextView[subCategory.length];
for (int i = 0; i < subCategory.length; i++) {
tv[i] = new TextView(this);
tv[i].setText(subCategory[i]);
tv[i].setId(i);
sCategoryLayout.addView(tv[i]);
tv[i].setOnClickListener(onclicklistener);
}
onclicklistener方法:
OnClickListener onclicklistener = new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if(v == tv[0]){
//do whatever you want....
}
}
};
答案 7 :(得分:0)
您可以为image / button / textview / edittext等设置onClick事件,如下所示,并在Activity中设置方法。
<Button
android:id="@+id/some_ui_element"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#00FFFFFF"
android:onClick="onClickButton"
android:shadowColor="#000"
android:text="@string/sometitle"
android:textColor="@android:color/primary_text_dark_nodisable" />
/**
* onClickView() called
* @param v
*/
public void onClickView(View v) {
//Do something
switch(v.getId()){
case R.id.someuielement :
break;
...
...
}
}