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

استفاده از Sliding Menu در چند اکتیویتی

طاهر  12 سال پیش  11 سال پیش
+10 0

با سلام

در صورتیکه بخواهیم از Sliding Menu در برنامه ای شامل چند اکتیویتی استفاده کنیم چه باید کرد تا از تکرار کدهای مربوط به فراخوانی
Sliding Menu و کلیک روی آیتم های آن جلوگیری کرد .

 

+1 0
کدهای بخش محتویات لیست که نیاز به چندبار نوشتن نداره. و شما به ازای هر اکتیویتی کافیه SlidingMenu رو new کنی. (12 سال پیش)
+1 0
اگر برای محتویات لیست بخوایم درسته ولی ایجاد SlidingMenu و توابع مربوط به رخداد کلیک روی اعضاء لیست ویو دوباره باید تکرار بشه (12 سال پیش)
+3 0
دوست نازنین، برای اینکا تنها کافیه یه کلاس جدید تعریف کنید و توی اون یکبار slidingmenu تون رو تعریف کنید بعد تو هرصفحه که خواستین تعریف کنین اون کلاس رو extends کنین از این activity. آموزش SlidingMenu رو انشالله در چند روز آینده خواهم گذاشت که یه طرح ابتکاری و بسیار جالب سبک با استفاده از خود قابلیت های اندروید هست میگذارم که همه بتونن استفاده کنند (11 سال پیش)
0 0
دست درست صدرا جان ببینم تست کنم ببینم چی میشه .. خدا خیرت بده پدر من در اومد از بس یک هفتست تست دارم میکنم ! (11 سال پیش)
0 0
صدرا جان میشه دقیق توضیح بدی به خدا یک هفتست گیر کردم اکه میشه قشنک بنویس کلاسشو!‌ من سوالم اینه که آخه اگه اکتیویتی هام از activityCheckl اکستند شدند نمیشه که از دوتا اکتیویتی بشه .. !‌!‌!‌!‌! کمکم کن مگه اینکه اینترفیس استفاده کنم که مکردذم ولی بازم متاسفانته مشکل داره (11 سال پیش)
+1 0
دوست عزیز در انتهای همین تاپیک توضیح کامل راحع بهش دادم. چک کردید؟ (11 سال پیش)
 برای این سوال 8 پاسخ وجود دارد.
پاسخ به سوال 
OmidAhmadian  12 سال پیش
+15 0

سلام

public class CustomizedSlidingMenu extends SlidingMenu {

    public CustomizedSlidingMenu(final Activity Activity) {
        super(Activity);

View view = G.inflater.inflate(R.layout.sliding_menu, null);
this.setMode(SlidingMenu.LEFT); this.setTouchModeAbove(SlidingMenu.TOUCHMODE_MARGIN); this.setBehindOffset(120); this.setFadeDegree(0.35f); this.attachToActivity(Activity, SlidingMenu.SLIDING_CONTENT); this.setMenu(view); }
}

حالا هرجا که خواستی از slidingmenu استفاده کنی کافیه کد زیر رو وارد کنی

CustomizedSlidingMenu slidingMenu = new CustomizedSlidingMenu(G.currentActivity);
0 0
سلام من اینو اضافه میکنم و به خوبیم کار میکنه ولی بعد از چند بار رفت و برگشت توی اکتیویتی ها یکدفه ارور میده و برنامه بسته میشه ... لازم به ذکره که یکبار این متد رو توی oncreate و یکبارم توی onresume به همین صورتی که شما استفاده میکنین استفاده میکنم ولی متاسفانه برنامه بسته میشه آیا به دلیل این نیست که هربار هی باز میایم و یک شی رو تولید میکنیم ؟! (11 سال پیش)
0 0
داخل OnResume اکتیویتی که از این کد استفاده می کنی این عبارت رو بذار ببین درست میشه یا نه G.currentActivity = this (11 سال پیش)
0 0
منظورم از کد ،همون عبارته پایینیه نه اصله کد (11 سال پیش)
0 0
من این کد شما رو تو اکتیویتی که میخوام استفاده کنم وقتی اضافه میکنم warning میده . چرا ؟ CustomizedSlidingMenu slidingMenu = new CustomizedSlidingMenu(G.currentActivity); (11 سال پیش)
پاسخ به سوال 
طاهر  12 سال پیش
0 0

خطای زیر دریافت میشه و برنامه اجرا نمیشه :

04-06 13:48:05.419: E/AndroidRuntime(2220): FATAL EXCEPTION: main
04-06 13:48:05.419: E/AndroidRuntime(2220): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.negahetazehco.MothersDay/com.negahetazehco.MothersDay.ActivityHome}: java.lang.NullPointerException
04-06 13:48:05.419: E/AndroidRuntime(2220):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1956)
04-06 13:48:05.419: E/AndroidRuntime(2220):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
04-06 13:48:05.419: E/AndroidRuntime(2220):     at android.app.ActivityThread.access$600(ActivityThread.java:123)
04-06 13:48:05.419: E/AndroidRuntime(2220):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
04-06 13:48:05.419: E/AndroidRuntime(2220):     at android.os.Handler.dispatchMessage(Handler.java:99)
04-06 13:48:05.419: E/AndroidRuntime(2220):     at android.os.Looper.loop(Looper.java:137)
04-06 13:48:05.419: E/AndroidRuntime(2220):     at android.app.ActivityThread.main(ActivityThread.java:4424)
04-06 13:48:05.419: E/AndroidRuntime(2220):     at java.lang.reflect.Method.invokeNative(Native Method)
04-06 13:48:05.419: E/AndroidRuntime(2220):     at java.lang.reflect.Method.invoke(Method.java:511)
04-06 13:48:05.419: E/AndroidRuntime(2220):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
04-06 13:48:05.419: E/AndroidRuntime(2220):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
04-06 13:48:05.419: E/AndroidRuntime(2220):     at dalvik.system.NativeStart.main(Native Method)
04-06 13:48:05.419: E/AndroidRuntime(2220): Caused by: java.lang.NullPointerException
04-06 13:48:05.419: E/AndroidRuntime(2220):     at android.view.ViewConfiguration.get(ViewConfiguration.java:331)
04-06 13:48:05.419: E/AndroidRuntime(2220):     at android.view.View.(View.java:2698)
04-06 13:48:05.419: E/AndroidRuntime(2220):     at android.view.View.(View.java:2744)
04-06 13:48:05.419: E/AndroidRuntime(2220):     at android.view.ViewGroup.(ViewGroup.java:385)
04-06 13:48:05.419: E/AndroidRuntime(2220):     at android.widget.RelativeLayout.(RelativeLayout.java:179)
04-06 13:48:05.419: E/AndroidRuntime(2220):     at com.jeremyfeinstein.slidingmenu.lib.SlidingMenu.(SlidingMenu.java:203)
04-06 13:48:05.419: E/AndroidRuntime(2220):     at com.jeremyfeinstein.slidingmenu.lib.SlidingMenu.(SlidingMenu.java:192)
04-06 13:48:05.419: E/AndroidRuntime(2220):     at com.jeremyfeinstein.slidingmenu.lib.SlidingMenu.(SlidingMenu.java:171)
04-06 13:48:05.419: E/AndroidRuntime(2220):     at com.negahetazehco.MothersDay.CustomizedSlidingMenu.(CustomizedSlidingMenu.java:12)
0 0
به خاطر این هست که شما currentActivity رو در متد resume مقدار دهی نکردید (12 سال پیش)
0 0
سلام من اینو اضافه میکنم و به خوبیم کار میکنه ولی بعد از چند بار رفت و برگشت توی اکتیویتی ها یکدفه ارور میده و برنامه بسته میشه ... لازم به ذکره که یکبار این متد رو توی oncreate و یکبارم توی onresume به همین صورتی که شما استفاده میکنین استفاده میکنم ولی متاسفانه برنامه بسته میشه آیا به دلیل این نیست که هربار هی باز میایم و یک شی رو تولید میکنیم ؟! (11 سال پیش)
پاسخ به سوال 
طاهر  12 سال پیش
0 0

هنگام فراخوانی و ایجاد باید از دستور زیر استفاده کرد

CustomizedSlidingMenu menu = new CustomizedSlidingMenu(this);



0 0
سلام من اینو اضافه میکنم و به خوبیم کار میکنه ولی بعد از چند بار رفت و برگشت توی اکتیویتی ها یکدفه ارور میده و برنامه بسته میشه ... لازم به ذکره که یکبار این متد رو توی oncreate و یکبارم توی onresume به همین صورتی که شما استفاده میکنین استفاده میکنم ولی متاسفانه برنامه بسته میشه آیا به دلیل این نیست که هربار هی باز میایم و یک شی رو تولید میکنیم ؟! (11 سال پیش)
0 0
دقیقا ۵ بار که برم و برگردم روی اکتیویتی هام دفعه ۵ برنامه بسته میشه !‌ چرا فک میکنین باید چکار کنم (11 سال پیش)
پاسخ به سوال 
h_uk2009  11 سال پیش
0 0

public class G extends Application {


public static CustomizedSlidingMenu menu;
}

  @Override @Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.page2);
G.menu = new CustomizedSlidingMenu(G.CurrentActivity);
}

protected void onPause() {
super.onPause();
if (G.menu.isMenuShowing())
G.menu.toggle();
}


@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
G.adapter.notifyDataSetChanged();
G.menu = null;
Log.i(G.LOG_TAG, "Menu is = " + G.menu);
G.menu = new CustomizedSlidingMenu(this);
Log.i(G.LOG_TAG, "Menu is = " + G.menu);
}

0 0
مسله دیگه هم که داره اینه که وقتی نیای دوباره بسازیش کاستوم های دیگه نمیشناسنش و وقتی مثلا صدا میزنی G.menu.toggle دیگه فقط باراول کار میکنه و دفعات بعدی کار نمیکنه (11 سال پیش)
0 0
حتی میام توی onresume یکبار null میکنم منوم رو ... فقط موندم که چجوری میشه کامل این شی رو از روی صفحه پاک کرد (11 سال پیش)
پاسخ به سوال 
h_uk2009  11 سال پیش
0 0

اصلا به من بگین چحوری میشه از شر این خلاص شد یعنی اینکه وقتی میسازیمش من چک کردم حتی وقتی مساوی با null قرار میدم بازم اسلاید منو چسبیده به اکتیوییتی چجور میشه کلا یک کاستوم کنترل مث اینو از اکتیویتی فعلی پاک کرد ؟

سوتال من درکل دوتاست

۱- چکار کنم که وقتی برمیگردم دوباره به اکتیویتی بدون نوشتن خطی که دوباره اسلایدینک منو رو مقداردهی میکنه به کاستوم پنل های دیگه بفهمونم که بشناسنش و فرمانهایی که میدم مثل G.menu.toggle عمل کنه ... چون وقتی که برمیکردم روی اکتیویتی با درگ کردن روی صفحه هنوز اسلاید منو فعاله ولی متغیر G.menu رو تا صدا میزنم کاری نمیکنه دیکه ...

۲- چحور کلا یک کاستوم کنترل که اضافه کردیمو جک کنیم اکه وجود داره پاکش کن و دوباره بساز توی onresume

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

این کاری که گفته اید هربار مقدار بدیم اسلاید منو رو کار اشتباهیه چون افزونگی ایجاد میکنه و برنامه داره هربار یک شیع تکراری بهش اضافه میشه به ازای هر اکتیویتی که میاد روی صفحه ... حالا به من بگین چکار کنم برنامم هنگ میکنه بعد یک مدت

پاسخ به سوال 
sadra  11 سال پیش
+4 0

دوست عزیز که سوال پرسیدی. شما ابتدا باید یه تابع مادر معرفی کنی و مثلا اسمشو میگذاریم AcitivityEnhanced

بعد میایم اونو extends می کنیم از توابعی که قراره توش استفاده بشه. مثلا اگر توبعی که استفاده میکنن Activity باشن از اون و اگه ListActivity باشن از اون یا هرچیزی دیگه. تو پروژه خودم چون کلاس هام یا Activity بودن یا ListActvity . دوتا کلاس ActivityEnhanced تعریف کردم و عدد 1 و 2 گذاشتم براش و Extends کردمش از Activity یا ListActivity.  که شد اینجوری:

 public class ActivityEnhanced1 extends ListActivity {
//and
public class ActivityEnhanced2 extends Activity {

بعد میایم به اون کلاسهامون و extendes شون میکنیم از یکی از این توابع مادر تا ازش ارس بری کنن. مثلا من اینجوری کردم:

 public class My_main extends ActivityEnhanced2 {

بعدش میایم توی یه کلاسG معروف تعریف میکنیم به شرح زیر:

 public class G extends Application {

public static Context context;
public static Activity currentActivity;

@Override
public void onCreate() {
super.onCreate();
context = getApplicationContext();


}
}

حالا میایم توی توابع مادر ActivityEnhanceds اول یه تابع onResume تعریف میکنیم:

 	@Override
public void onResume() {
super.onResume();
G.currentActivity = this;


}

بعد میایم حالا اون توابع  sliding مون رو اینجا زیرش تعریف میکنیم و مقدارشم اول public مینویسم . مثلا من اینجوری نوشتم:

 public void myfunc(){
}

حالا واسه اینکه توی توابعمون ممکنه بخوایم از آدرس کلاسی که توش هستیم استفاه کنیم دیگه نمیایم بنویسیم مثلا Main.this بلکه مینویسیم G.currentActivity که درواقع آدرس کلاسی که توش هست رو برای ما برمی گردونه. خب حالا برای آزمایش. ما یه کلاس main داریم که قرار اگه روی یه buttoni کلیک شد این بره به یه اکتیویتی دیگه.  این تابع رو میایم اول توی ActivityEnhanced تعریف میکنیم که کلای میشه این:

 public class ActivityEnhanced extends ListActivity {


@Override
public void onResume() {
super.onResume();
G.currentActivity = this;


}

public void myfunc(){
Button my_btn=(Button) di.findViewById(R.id.my_btn);

my_btn.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View arg0) {
Intent i=new Intent(G.currentActivity,Other_page.class);
startActivity(i);
}
});

}
}

حالا تو اون کلاس Main میایم و اول extends میکنم از این کلاسه بعدشم دوتا G و تابع مورد نظرمون رو فراخونی میکنیم:

  public class Main extends ActivityEnhanced2 {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);


G.currentActivity = this;
myfunc();
}
}

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

0 0
دست بسیار درست مرصی ... چک میکنم ببینیم چی میشه (11 سال پیش)
0 0
فقط این کد اسلاید منو رو نکفتی چجور استفاده کنم !؟ (11 سال پیش)
0 0
گفتم دیگه تابع مون رو که اونجا نوشته بودیم توی اون اکتیویتی که میخوایم فراخونی میکنیم. اگه نگاه کنی من اینجا نوشتم myfunc(); (11 سال پیش)
پاسخ به سوال 
h_uk2009  11 سال پیش
0 0

ببین sadra جان این تابعی که در زیر مینویسم ورودیش یک اکتیویتیه شما من کلا منظورتو فهمیدم میگی آقا فک کن اصلا اکتیویتی انهنس همون اکتیویتی چک استاده .. بیا یک تابع توش تعریف کن به اسم myfunc و کدهاتو توش بزار ازین به بعدچون اکتیویتی ها از اکتیویتی انهنس ارث بری میکنه پس دیکه نیاز به نوشتن چند باره این تابع نیست اما سوالم اینه شما پوست کنده به من بگو این تابع رو من چحوری توی تابع myfunc قرار بدم که مثل بچچه آدم کار کنه چون ورودیشو اینا فرق داره یکم تابعو باز مینویسم

 publicclassCustomizedSlidingMenuextendsSlidingMenu{publicCustomizedSlidingMenu(finalActivityActivity){super(Activity);
View view = G.inflater.inflate(R.layout.sliding_menu,null);
this.setMode(SlidingMenu.LEFT);this.setTouchModeAbove(SlidingMenu.TOUCHMODE_MARGIN);this.setBehindOffset(120);this.setFadeDegree(0.35f);this.attachToActivity(Activity,SlidingMenu.SLIDING_CONTENT);this.setMenu(view);}
}

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