[英]In Android how to implement a pop-up screen with buttons. Clicking the buttons calls different functions in the activity
[英]Android widget with 3 buttons. And different intents
我試圖創建一個Widget有一個奇怪的問題。 小部件是一個隨機問題,有3個答案選項(按鈕)。 我從互聯網加載問題,這是有效的。
我混淆了答案,所以答案並不總是在同一個地方。 此外,可以有多個正確的答案。
public RemoteViews setAnswers(JSONObject questionObj, RemoteViews views) throws JSONException {
// Get the Answers
String answerA = questionObj.getString("Ans1");
String answerB = questionObj.getString("Ans2");
String answerC = questionObj.getString("Ans3");
// Get the Answers that is correct (1 = Correct, 0 = Wrong)
int correctA = Integer.parseInt(questionObj.getString("correct1"));
int correctB = Integer.parseInt(questionObj.getString("correct2"));
int correctC = Integer.parseInt(questionObj.getString("correct3"));
// Get help text for correct or wrong answer (HTML)
String HTTPcor = questionObj.getString("HTTPcor")+" - Correct";
String HTTPwro = questionObj.getString("HTTPwro")+" - Wrong";
// Create the Intent for the answers that is correct
Intent correctIntent = new Intent(maincontext, AdMain.class);
correctIntent.putExtra("appWidID", appWidId);
correctIntent.putExtra("correct", 1); // Answer is correct.
correctIntent.putExtra("HTTP", HTTPcor); // Help text.
PendingIntent correctIntentPending = PendingIntent.getActivity(maincontext, 0, correctIntent, PendingIntent.FLAG_UPDATE_CURRENT);
// Create the Intent for the answers that is wrong
Intent wrongIntent = new Intent(maincontext, AdMain.class);
wrongIntent.putExtra("appWidID", appWidId);
wrongIntent.putExtra("correct", 0); // Answer is wrong.
wrongIntent.putExtra("HTTP", HTTPwro); // Help text.
PendingIntent wrongIntentPending = PendingIntent.getActivity(maincontext, 0, wrongIntent, PendingIntent.FLAG_UPDATE_CURRENT);
// Create a random number between 1 and 6 (6 different ways to mix up 3 buttons)
Random generator = new Random();
int mix = generator.nextInt(6) + 1;
Log.v("JapanWidget", "AnswerMix - "+mix+" - appWidId = "+appWidId);
// DEBUG Set mix to 1 Until i get the Intent fixed.
mix = 1;
// Mix the buttons.
switch(mix) {
case 1:
views.setTextViewText(R.id.Answer1, answerA); // Button 1 answer A
// If correctA = 1 THEN set correctIntentPending ELSE set wrongIntentPending
if (correctA == 1) { views.setOnClickPendingIntent(R.id.Answer1, correctIntentPending); } else { views.setOnClickPendingIntent(R.id.Answer1, wrongIntentPending); }
views.setTextViewText(R.id.Answer2, answerB); // Button 2 answer B
// If correctB = 1 THEN set correctIntentPending ELSE set wrongIntentPending
if (correctB == 1) { views.setOnClickPendingIntent(R.id.Answer2, correctIntentPending); } else { views.setOnClickPendingIntent(R.id.Answer2, wrongIntentPending); }
views.setTextViewText(R.id.Answer3, answerC); // Button 3 answer C
// If correctB = 1 THEN set correctIntentPending ELSE set wrongIntentPending
if (correctC == 1) { views.setOnClickPendingIntent(R.id.Answer3, correctIntentPending); } else { views.setOnClickPendingIntent(R.id.Answer3, wrongIntentPending); }
break;
default:
views.setTextViewText(R.id.Answer1, answerA);
if (correctA == 1) { views.setOnClickPendingIntent(R.id.Answer1, correctIntentPending); } else { views.setOnClickPendingIntent(R.id.Answer1, wrongIntentPending); }
views.setTextViewText(R.id.Answer2, answerB);
if (correctB == 1) { views.setOnClickPendingIntent(R.id.Answer2, correctIntentPending); } else { views.setOnClickPendingIntent(R.id.Answer2, wrongIntentPending); }
views.setTextViewText(R.id.Answer3, answerC);
if (correctC == 1) { views.setOnClickPendingIntent(R.id.Answer3, correctIntentPending); } else { views.setOnClickPendingIntent(R.id.Answer3, wrongIntentPending); }
break;
}
return views;
}
問題是,當我從新的Activity中執行GetExtra時,它將始終是在wrongIntentPending中設置的額外內容。 這里出現問題。 但我確實看到“if(correctA == 1){} else {}”的工作正確。 即使我將其設置為“if(correctA == 1){} else {}”,然后我從wrongIntentPending獲取Extra。
出了什么問題? 或者有更好的方法嗎?
我在閱讀本頁后發現了這個問題: http : //www.bogdanirimia.ro/android-widget-click-event-multiple-instances/269
工作代碼:
// Create the Intent for the answers that is correct
Intent correctIntent = new Intent(maincontext, AdMain.class);
correctIntent.putExtra("appWidID", appWidId);
correctIntent.putExtra("correct", 1); // Answer is correct.
correctIntent.putExtra("HTTP", HTTPcor); // Help text.
PendingIntent correctIntentPending = PendingIntent.getActivity(maincontext, 0, correctIntent, PendingIntent.FLAG_UPDATE_CURRENT);
// Create the Intent for the answers that is wrong
Intent wrongIntent = new Intent(maincontext, AdMain.class);
wrongIntent.putExtra("appWidID", appWidId);
wrongIntent.putExtra("correct", 0); // Answer is wrong.
wrongIntent.putExtra("HTTP", HTTPwro); // Help text.
PendingIntent wrongIntentPending = PendingIntent.getActivity(maincontext, 1, wrongIntent, PendingIntent.FLAG_UPDATE_CURRENT);
在“PendingIntent getActivity(Context context,int requestCode,Intent intent,int flags)”中,我需要設置2個不同的requestCodes。 即便是谷歌開發者網頁說它目前還沒有使用過。
所以我改變了這一行:
PendingIntent wrongIntentPending = PendingIntent.getActivity(maincontext, 1 ,wrongIntent,PendingIntent.FLAG_UPDATE_CURRENT);
現在它有效。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.