آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

سوال مهم در مورد Activty Enhanced

Mohammad Vp  11 سال پیش  11 سال پیش
0 0

با سلام خسته نباشید دوستان عزیز

بی معطلی میرم سر اصل مطلب چون واقعا این موضوع چند روز رو مخمه وقتمو گرفته راه حلی واسش گیر نمیارم!

دوستان من یه پروژه مهم برداشتم که تعداد اکتیویتی هاش زیاده اگه بخوام یک کد (مثل تغییر سایز کلمات) رو درون تک تک اکتیویتی ها بزارم کاری دشوار و به نظر غیرحرفه ایی میاد

برا همین من تصمیم گرفتم به جا اینکار 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

+1 0
یه راه استفاده از SharedPerferences ه، لینک آموزش: لینک یه راهم استفاده از آموزش های آقای کاشی زاده ست، لینک: لینک (11 سال پیش)
+1 0
بازم مثل همیشه اقا محسن بهترین راه حل رو دادند دست شما درد نکنه الان میرم پی این روش انشالله بشه اکی شه ممنون رفیق (11 سال پیش)
 برای این سوال 3 پاسخ وجود دارد.
پاسخ به سوال 
hamcalas  11 سال پیش
+1 0

فکر می کنم یا برداشت شما  از اکتیوتی اکستند شده اشتباهه یا برداشت من،  شما 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);
}



}

}

}


همانطور که گفتم مطمئن نیستم شاید پاسخم اشتباه باشد

پاسخ به سوال 
Mohammad Vp  11 سال پیش
0 0

والله واسه هندلر باید یه thread بسازم بعد کد رو تو اون قرار بدم  وهندلر کنم از اکتیویتی اصلی درسته؟

ولی فکر نمیکنم این چاره مشکل باشه چون که چندتا اکتیویتی دارم نه یکی نه دوتا!!!

بازم نمیدونم شاید من اشتباه میکنم کلا به قول شما

کسی از دوستان میتونه بگه من اشتباه میکنم یا اصن چیزی که میگم منطقی هست یا خیر؟

0 0
؟؟؟؟؟ (11 سال پیش)
+1 0
دوست عزیز ، شما نمیتونید توی enhanced بدون داشتن view این کار رو انجام بدید ، یا باید با inflater کار کنید ، که در این حالت هم مشکلات خاص خودش رو دارید یا اینکه یک custom view درست کنید ، و اون رو در تمامی اکتیویتی ها اجرا کنید و یک جا مقادر در اون ست بشن (11 سال پیش)
0 0
دوست عزیز حرفتون صحیحه ولی اگه بتونید واسم بایک مثال بهتر شرح بدید ممنون میشم الان فکر کنم روش اقا محسن جواب بده ولی دوست دارم این روشم یاد داشته باشم ممنون میشم با مثال کدی توضیح بدید که بتونم درک کنم (11 سال پیش)
پاسخ به سوال 
محسن علیزاده  11 سال پیش
+1 0

ابتدا یک فایل جدید در پکیجت ایجاد کن و اسمشو بذار 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);
}

به همین راحتی!

0 0
حاج محسن تا حالا کسی بت گفته چقدر گلی؟ تشکر داداش گلم ممنون از همه دوستان:x (11 سال پیش)
0 0
چاکرم داداش ;) (11 سال پیش)

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .