بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]
پرسش و پاسخ

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

مدیریت گفتگو
طاهر 12 سال پیش
آخرین تغییر: 11 سال پیش

با سلام

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

 

نظرات

کدهای بخش محتویات لیست که نیاز به چندبار نوشتن نداره. و شما به ازای هر اکتیویتی کافیه SlidingMenu رو new کنی.
طاهر 12 سال پیش
اگر برای محتویات لیست بخوایم درسته ولی ایجاد SlidingMenu و توابع مربوط به رخداد کلیک روی اعضاء لیست ویو دوباره باید تکرار بشه
sadra 11 سال پیش
دوست نازنین، برای اینکا تنها کافیه یه کلاس جدید تعریف کنید و توی اون یکبار slidingmenu تون رو تعریف کنید بعد تو هرصفحه که خواستین تعریف کنین اون کلاس رو extends کنین از این activity. آموزش SlidingMenu رو انشالله در چند روز آینده خواهم گذاشت که یه طرح ابتکاری و بسیار جالب سبک با استفاده از خود قابلیت های اندروید هست میگذارم که همه بتونن استفاده کنند
h_uk2009 11 سال پیش
دست درست صدرا جان ببینم تست کنم ببینم چی میشه .. خدا خیرت بده پدر من در اومد از بس یک هفتست تست دارم میکنم !
h_uk2009 11 سال پیش
صدرا جان میشه دقیق توضیح بدی به خدا یک هفتست گیر کردم اکه میشه قشنک بنویس کلاسشو!‌ من سوالم اینه که آخه اگه اکتیویتی هام از activityCheckl اکستند شدند نمیشه که از دوتا اکتیویتی بشه .. !‌!‌!‌!‌! کمکم کن مگه اینکه اینترفیس استفاده کنم که مکردذم ولی بازم متاسفانته مشکل داره
sadra 11 سال پیش
دوست عزیز در انتهای همین تاپیک توضیح کامل راحع بهش دادم. چک کردید؟

پاسخ‌ها 8

OmidAhmadian 12 سال پیش

سلام

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);

نظرات

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

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

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)

نظرات

javac 12 سال پیش
به خاطر این هست که شما currentActivity رو در متد resume مقدار دهی نکردید
h_uk2009 11 سال پیش
سلام من اینو اضافه میکنم و به خوبیم کار میکنه ولی بعد از چند بار رفت و برگشت توی اکتیویتی ها یکدفه ارور میده و برنامه بسته میشه ... لازم به ذکره که یکبار این متد رو توی oncreate و یکبارم توی onresume به همین صورتی که شما استفاده میکنین استفاده میکنم ولی متاسفانه برنامه بسته میشه آیا به دلیل این نیست که هربار هی باز میایم و یک شی رو تولید میکنیم ؟!
طاهر 12 سال پیش

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

CustomizedSlidingMenu menu = new CustomizedSlidingMenu(this);



نظرات

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

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);
}

نظرات

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

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

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

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

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

نظرات

h_uk2009 11 سال پیش

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

نظرات

sadra 11 سال پیش

دوست عزیز که سوال پرسیدی. شما ابتدا باید یه تابع مادر معرفی کنی و مثلا اسمشو میگذاریم 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();
}
}

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

نظرات

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

ببین 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);}
}

نظرات


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