سوال مهم در مورد Activty Enhanced
با سلام خسته نباشید دوستان عزیز
بی معطلی میرم سر اصل مطلب چون واقعا این موضوع چند روز رو مخمه وقتمو گرفته راه حلی واسش گیر نمیارم!
دوستان من یه پروژه مهم برداشتم که تعداد اکتیویتی هاش زیاده اگه بخوام یک کد (مثل تغییر سایز کلمات) رو درون تک تک اکتیویتی ها بزارم کاری دشوار و به نظر غیرحرفه ایی میاد
برا همین من تصمیم گرفتم به جا اینکار activity enhanced رو قرار بدم و درونش کد زیر رو بگزارم
public class ActivityEnhanced extends Activity {
//معرفی تکست ویو همراه با فینال تا مقدارش ثابت بشه
final TextView t1 = (TextView) findViewById(R.id.t1);
//معرفی سک بار همراه با فینال تا مقدارش ثابت بشه
final SeekBar sk = (SeekBar) findViewById(R.id.sk);
@Override
protected void onResume() {
G.currentActivity = this;
super.onResume();
}
sk.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
//تعریف یک متغییر عددی
int fontSize = 0;
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
// TODO Auto-generated method stub
//معرفی یک شرط برای رویداد توقف
if (fontSize < 30)
{
//مقدار دهی برای فونت سایز تا عدد 30
fontSize = 30;
//ست کردن سیک بار با مقدار int
sk.setProgress(fontSize);
}
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
// TODO Auto-generated method stub
}
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
// TODO Auto-generated method stub
//برابر کردن مقدار سیک بار با فونت سایز
fontSize = progress;
//و در اخر ست کردن مقدار فونت سایز بروی تکست ویو
t1.setTextSize(fontSize);
}
});
}
}
با این کار این خاصیت در همه اکتیویتی هایی که اکستنز از این اکتیویتی میشن قابل اجراست و نیاز به قرار دادن این کد در کل اکتیویتی های ساخته شده نیس درسته؟
ولی یه موضوعی هست وقتی میخوام این دوخاصیت رو در activty enhanced تعریف کنم ارور میده
//معرفی تکست ویو همراه با فینال تا مقدارش ثابت بشه
final TextView t1 = (TextView) findViewById(R.id.t1);
//معرفی سک بار همراه با فینال تا مقدارش ثابت بشه
final SeekBar sk = (SeekBar) findViewById(R.id.sk);
و قبول نمیکنه کل کدها خراب میشه
اگه هم بخوام تو هر اکتیویتی تعریف کنم بازم قبول نمیکنه
اگر حذفش کنم خوب دیگه بقیه کدها معنی نداره بازم قبول نمیکنه
خوب نظرتون چیه چه کاری میشه انجام داد؟
همه قوانین هم رعایت شده مشکلی نیس!
فقط به تعاریف کوتاه بسنده نکنید چون بنده شاید به اندازه شما حرفه ایی نباشم و نتونم منظورتونو درک کنم
اگه لطف کنید دقیق بگید چه کاری انجام بدم عالی میشه
با مثال هم بگید که دیگه نوره الانوره:D
دمه همتون گرم
winter
فکر می کنم یا برداشت شما از اکتیوتی اکستند شده اشتباهه یا برداشت من، شما textView ها را باید در کلاسی مقدار دهی کنید که setContentView شده باشد به xml که درون آن textView و... را را تعریف کرده اید .
اگر هم کدهایتان را به این شکل تنظیم کردید شاید اگر از handler استفاده کنید به جواب می رسید
publicvoid onStopTrackingTouch(SeekBar seekBar){
Handler handler = new Handler();
// TODO Auto-generated method stub
handler .post(new Runnable() {
public void run() {
//معرفی یک شرط برای رویداد توقف
if(fontSize <30)
{
//مقدار دهی برای فونت سایز تا عدد 30
fontSize =30;
//ست کردن سیک بار با مقدار int
sk.setProgress(fontSize);
}
}
}
}
همانطور که گفتم مطمئن نیستم شاید پاسخم اشتباه باشد
والله واسه هندلر باید یه thread بسازم بعد کد رو تو اون قرار بدم وهندلر کنم از اکتیویتی اصلی درسته؟
ولی فکر نمیکنم این چاره مشکل باشه چون که چندتا اکتیویتی دارم نه یکی نه دوتا!!!
بازم نمیدونم شاید من اشتباه میکنم کلا به قول شما
کسی از دوستان میتونه بگه من اشتباه میکنم یا اصن چیزی که میگم منطقی هست یا خیر؟
ابتدا یک فایل جدید در پکیجت ایجاد کن و اسمشو بذار G و بعد محتویات زیر رو در اون paste کن:

import android.app.Application;
import android.content.SharedPreferences;
import android.preference.PreferenceManager;
public class G extends Application {
public static SharedPreferences preferences;
@Override
public void onCreate() {
preferences = PreferenceManager.getDefaultSharedPreferences(this);
super.onCreate();
}
}
بعد تو فایل AndroidManifest.xml مثل زیر به کلاس G آدرس بده:

بعد تو قسمت تنظیماتت که می خوای مثلا اندازه نوشته رو تغییر بدی، حالا یا تو آنکلیک یا هر چیزی کد زیر رو بذار:
public class main extends ActivityEnhanced {
public SharedPreferences.Editor preferencesEditor;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
preferencesEditor = G.preferences.edit();
setsize_btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
preferencesEditor.putString("font_size", "16");
preferencesEditor.commit();
}
});
}
}
بعد تو اکتیویتی های دیگت که میخای فراخونی کنی از کد زیر استفاده کن:
String fontSize = G.preferences.getString("font_size", "16");
if(fontSize.equals("16")){
textView.setTextSize(16);
}
به همین راحتی!
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .