我有一个自定义对话框首选项,有一堆button.each按钮代表一个数字。如你想设置闹钟时的时钟应用程序。如何在对话框首选项中点击每个按钮? 这是我的对话框布局(time_picker)的一部分:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center">
<LinearLayout
android:id="@+id/showTimer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
>
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:text="_ _ : _ _"
android:textSize="20dp"
android:textStyle="bold" />
</LinearLayout>
<RelativeLayout
android:id="@+id/Buttons"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:layout_below="@+id/showTimer"
android:layout_marginTop="10dp">
<Button
android:id="@+id/button1"
android:layout_width="100dp"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/button5"
android:layout_alignBottom="@+id/button5"
android:layout_alignLeft="@+id/button3"
android:layout_centerInParent="true"
android:text="6"
android:textStyle="bold"
android:textSize="20dp"
android:tag="1"
android:background="@android:color/transparent" />
<Button
android:id="@+id/button2"
android:layout_width="100dp"
...
这是设置启动对话框首选项的布局:
<com.example.test.TimerForNoti
android:key = "pref_sync_noti_timer"
android:title = "@string/pref_sync_noti_timer"
android:summary = "@string/pref_sync_noti_timer_summ"
android:dialogMessage = "@string/pref_sync_noti_timer">
</com.example.test.TimerForNoti>
这是一个对话框首选项(TimerForNoti):
public class TimerForNoti extends DialogPreference
{
public TimerForNoti(Context context, AttributeSet attrs) {
super(context, attrs);
setDialogLayoutResource(R.layout.time_picker);
setPositiveButtonText(R.string.ok);
setNegativeButtonText(R.string.cancel);
Dialog di = new Dialog(context);
di.setContentView(R.layout.time_picker);
OnClickListener test = new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
String tag = v.getTag().toString();
if(tag == "1"){
Log.v("onOne", "ok");
}
// .....
}
};
Button btn1 = (Button) di.findViewById(R.id.button1);
btn1.setOnClickListener(test);
}
}
答案 0 :(得分:0)
如果我理解你的问题,你可以为每个按钮设置标签,并为所有按钮设置一个OnClickListener
:
<Button
android:id="@+id/button1"
android:layout_width="100dp"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/button5"
android:layout_alignBottom="@+id/button5"
android:layout_alignLeft="@+id/button3"
android:layout_centerInParent="true"
android:text="6"
android:textStyle="bold"
android:textSize="20dp"
android:tag="6"
android:background="@android:color/transparent" />
代码:
OnClickListener buttonsListener = new OnClickListener() {
@Override
public void onClick(View v) {
String buttonText = v.getTag().toString();
// your logic here
}
};
Button btn1 = (Button)findViewById(R.id.button1);
btn1.setOnClickListener(buttonsListener);
Button btn2 = (Button)findViewById(R.id.button2);
btn2.setOnClickListener(buttonsListener);
Button btn3 = (Button)findViewById(R.id.button3);
btn3.setOnClickListener(buttonsListener);
// your buttons here
您也可以使用OnClickListener
中的v.getId()来确定点击了哪个按钮
答案 1 :(得分:0)
尽管我理解你的问题。您希望在单击的每个按钮上调用一个方法。 为此,将它添加到xml中的每个按钮元素:
<Button
android:onClick="OnClick"
.. />
将此方法添加到要执行任务的.java文件中:
public void OnClick(View v){
// do something....
}
或者您可以直接在按钮对象
上调用setOnClickListener
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// do something....
}
});