OctaviaMelody
@OctaviaMelody
Люблю играть на виолончели

Как заменить статистический текст на текст с Strings.xml?

Вот искала, искала и так и не нашла ответа на свой вопрос.
Большинство предлагают получать текст благодаря getText, но private final static не хочет дружить с getResources.
Если вы меня еще не поняли, то я хочу заменить значение AppName на значение, которое будет отображаться со Strings.xml:
private final static String APP_TITLE = "App name";


Вот и полный код:
package com.example.ps4;

import android.app.AlertDialog;
import android.app.Dialog;
import android.content.ActivityNotFoundException;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;

import android.net.Uri;



public class AppRater {



	private final static String APP_TITLE = "App name";
	private final static String APP_PACKAGE_NAME = "com.dropbox.android";
	

	private final static int DAYS_UNTIL_PROMPT = 0;
	private final static int LAUNCH_UNTIL_PROMPT = 5;
	
	public static void app_launched(Context context) {
		SharedPreferences prefs = context.getSharedPreferences("rate_app", 0);
		if(prefs.getBoolean("dontshowagain", false)){
			return;
		}
		
		SharedPreferences.Editor editor = prefs.edit();
		
		long launch_count = prefs.getLong("launch_count", 0) + 1;
		editor.putLong("launch_count", launch_count);
		
		Long date_firstLaunch = prefs.getLong("date_first_launch", 0);
		if(date_firstLaunch == 0) {
			date_firstLaunch = System.currentTimeMillis();
			editor.putLong("date_first_launch", date_firstLaunch);
		}
		
		if(launch_count >= LAUNCH_UNTIL_PROMPT) {
			
			if(System.currentTimeMillis() >= date_firstLaunch + (DAYS_UNTIL_PROMPT * 24 * 60 * 60 * 1000)){
				showRateDialog(context, editor);
			}
		}
		editor.commit();
	}
	
	public static void showRateDialog(final Context context, final SharedPreferences.Editor editor) {
		
		Dialog dialog = new Dialog(context);
		
		AlertDialog.Builder builder = new AlertDialog.Builder(context);
		
		String message = "If you enjoy using "
				+ APP_TITLE 
				+ ", please take a moment to rate the app. "
				+ "Thank you for your support!";
		
		builder.setMessage(message)
			.setTitle("Rate " + APP_TITLE)
			.setIcon(context.getApplicationInfo().icon)
			.setCancelable(false)
			.setPositiveButton("Rate Now", new DialogInterface.OnClickListener() {
				
				@Override
				public void onClick(DialogInterface dialog, int which) {
					editor.putBoolean("dontshowagain", true);
					editor.commit();
					

					try {
						context.startActivity(new Intent(Intent.ACTION_VIEW,
								Uri.parse("market://details?id=" + APP_PACKAGE_NAME)));
					}catch(ActivityNotFoundException e) {

					}
					
					dialog.dismiss();
				}
			})
			.setNeutralButton("Later", new DialogInterface.OnClickListener() {
				
				@Override
				public void onClick(DialogInterface dialog, int which) {

					dialog.dismiss();
				}
			})
			.setNegativeButton("No, Thanks", new DialogInterface.OnClickListener() {
				
				@Override
				public void onClick(DialogInterface dialog, int which) {
					if(editor != null) {
						editor.putBoolean("dontshowagain", true);
						editor.commit();
					}
					

					
					dialog.dismiss();
				}
			});
		
		dialog = builder.create();
		dialog.show();
	}

}


activity_main, конечно же, не отправляю, он попросту пустой.

Заранее благодарю за любую оказанную помощь!
  • Вопрос задан
  • 366 просмотров
Пригласить эксперта
Ответы на вопрос 2
@itdroid
ИМХО
private final static String APP_TITLE = "App name";
тут лишнее. И более правильным решением будет перенести все строки в ресурсы, например так:

<string name="app_name">App name</string>
<string name="rate_dialog_msg">If you enjoy using %1$s, please...</string>


И в методе showRateDialog() использовать это следующим образом:
String appName = context.getString(R.string.app_name);
String message = context.getString(R.string.rate_dialog_msg, appName);


Рекомендация по получению стрингов из strings.xml отностися не только к константам, но и ко всем строкам, которые Вы собираетесь показывать пользователю. Это упростит локализацию в будущем, да и код будет смотрется чище.
Ответ написан
Комментировать
@FoxInSox
public static void app_launched(Context context) {
  APP_TITLE = context.getString(R.string.text_id);
  //...
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы