我可以在Web开发中将变量设置为类似会话的上下文吗?
以下是我的代码,我将在Android应用程序启动后立即开发一个确认框:
package com.example.alertboxandloadingwidgets;
import android.os.Bundle;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.view.Menu;
import android.widget.Toast;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Boolean result = showConfirmationBox("Are you sure you want to do this",
this);
}
public Boolean showConfirmationBox(String messageToShow, final Context context) {
// prepare the alert box
AlertDialog.Builder alertbox = new AlertDialog.Builder(context);
// set the message to display
alertbox.setMessage(messageToShow);
// set a positive/yes button and create a listener
alertbox.setPositiveButton("Yes",
new DialogInterface.OnClickListener() {
// do something when the button is clicked
public void onClick(DialogInterface arg0, int arg1) {
Toast.makeText(context,
"'Yes' button clicked", Toast.LENGTH_SHORT)
.show();
}
});
// set a negative/no button and create a listener
alertbox.setNegativeButton("No", new DialogInterface.OnClickListener() {
// do something when the button is clicked
public void onClick(DialogInterface arg0, int arg1) {
Toast.makeText(context, "'No' button clicked",
Toast.LENGTH_SHORT).show();
}
});
// display box
alertbox.show();
}
}
但我希望如果单击yes
按钮,则必须返回true
,如果单击no
按钮,则必须返回false
。
但我无法这样做,因为onClickListener
的返回类型无效。
但问题是我已经使它成为泛型意味着这个方法我必须在CommonUtilities类中编写,其中任何活动都可以使用此方法。所以我必须设置或重置我调用此方法的结果参数的值。
答案 0 :(得分:6)
Android对话框是异步的,因此您需要重构代码来处理此问题。我猜你打算做这样的事情:
boolean result = showConfirmation(...);
if(result) {
//do something
}
else {
//do something else
}
您可以通过以下方式获得相同的结果:
public class MainActivity extends Activity {
private boolean result;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
showConfirmationBox("Are you sure you want to do this", this);
}
private doOnTrueResult() {
result = true;
//do something
}
private doOnFalseResult() {
result = false;
//do something else
}
public void showConfirmationBox(String messageToShow, final Context context) {
// prepare the alert box
AlertDialog.Builder alertbox = new AlertDialog.Builder(context);
// set the message to display
alertbox.setMessage(messageToShow);
// set a positive/yes button and create a listener
alertbox.setPositiveButton("Yes",
new DialogInterface.OnClickListener() {
// do something when the button is clicked
public void onClick(DialogInterface arg0, int arg1) {
Toast.makeText(context,
"'Yes' button clicked", Toast.LENGTH_SHORT)
.show();
doOnTrueResult();
}
});
// set a negative/no button and create a listener
alertbox.setNegativeButton("No", new DialogInterface.OnClickListener() {
// do something when the button is clicked
public void onClick(DialogInterface arg0, int arg1) {
Toast.makeText(context, "'No' button clicked",
Toast.LENGTH_SHORT).show();
doOnFalseResult();
}
});
// display box
alertbox.show();
}
}
答案 1 :(得分:3)
这就是我总是处理对话框中数据的方式
alertbox.setPositiveButton("Yes",
new DialogInterface.OnClickListener() {
// do something when the button is clicked
public void onClick(DialogInterface arg0, int arg1) {
Toast.makeText(context,
"'Yes' button clicked", Toast.LENGTH_SHORT)
.show();
myFunction(item);
}
});
private void myFunction(int result){
// Now the data has been "returned" (that's not
// the right terminology)
}
同样,对其他Button使用另一个函数
答案 2 :(得分:1)
您必须将值从onClickListener
传递给全局变量或其他方法。
正确识别onClickListener
的返回类型为 void 。
有关更复杂的解决方案,请查看this post
答案 3 :(得分:1)
为结果值创建setter
,并将值更改为onClick()
方法中的选定值。
让showConfirmationBox
无效; - )
答案 4 :(得分:1)
如果功能
public Boolean showConfirmationBox(String messageToShow, final Context context)
需要在主线程中调用,你不能这样做。您永远不会等待主线程上的用户输入。这将导致ANR。
如果可以在后台线程中调用该函数,则可以向主线程发送消息以显示警告框,然后等待结果。充分利用“处理程序”。
答案 5 :(得分:1)
你不能这样做,但你可以创建一个布尔变量,如果是则存储为真,如果没有则存储假,然后你可以相应地使用该变量
答案 6 :(得分:1)
一种简单的方法可以做到:
public class MainActivity extends Activity {
public static boolean result;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
showConfirmationBox("Are you sure you want to do this", this);
}
public Boolean showConfirmationBox(String messageToShow, final Context context) {
AlertDialog.Builder alertbox = new AlertDialog.Builder(context);
alertbox.setMessage(messageToShow);
alertbox.setPositiveButton("Yes",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface arg0, int arg1) {
Toast.makeText(context, "'Yes' button clicked", Toast.LENGTH_SHORT).show();
MainActivity.result = true;
}
});
// set a negative/no button and create a listener
alertbox.setNegativeButton("No", new DialogInterface.OnClickListener() {
// do something when the button is clicked
public void onClick(DialogInterface arg0, int arg1) {
Toast.makeText(context, "'No' button clicked",
Toast.LENGTH_SHORT).show();
MainActivity.result = false;
}
});
// display box
alertbox.show();
}
}
答案 7 :(得分:0)
其中一个选项是使用
public Button getButton (int whichButton)
Gets one of the buttons used in the dialog.
this Returns
The button from the dialog, or null if a button does not exist.
有关详细信息,请查看链接http://developer.android.com/reference/android/app/AlertDialog.html
答案 8 :(得分:0)
这可能有助于你
public class MainActivity extends Activity {
Boolean mresult;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Boolean result = showConfirmationBox("Are you sure you want to do this",this);
Toast.makeText(getApplicationContext(), ""+result, Toast.LENGTH_LONG).show();
}
public Boolean showConfirmationBox(String messageToShow, final Context context) {
AlertDialog.Builder alertbox = new AlertDialog.Builder(context);
// set the message to display
alertbox.setMessage(messageToShow);
// set a positive/yes button and create a listener
alertbox.setPositiveButton("Yes",
new DialogInterface.OnClickListener() {
// do something when the button is clicked
public void onClick(DialogInterface arg0, int arg1) {
Toast.makeText(context,
"'Yes' button clicked", Toast.LENGTH_SHORT)
.show();
mresult = true;
}
});
// set a negative/no button and create a listener
alertbox.setNegativeButton("No", new DialogInterface.OnClickListener() {
// do something when the button is clicked
public void onClick(DialogInterface arg0, int arg1) {
Toast.makeText(context, "'No' button clicked",
Toast.LENGTH_SHORT).show();
mresult = false;
}
});
// display box
alertbox.show();
return mresult;
}
}