PDA

View Full Version : همفکری در خصوص رفع ایراد کد



RealDream
شنبه 24 آبان 1393, 18:53 عصر
درود دوستان،
من مدتیه درگیر برنامه نویسی اندروید شدم و گاهی مشکلاتم رو با کمک جستجو توی همین انجمن خودمون یا نت پیدا می کنم اما متاسفانه موردی که پیش اومده هیچ سلوشنی رو حداقل من نتونستم براش پیدا کنم . این تکه کدی که قرار میدم در واقع یه دکمه اس که یه اکتیوتی دیگه رو به صورت دیالوگ باز میکنه. برای من مهم بود که حتما به این شکل کد فراخوانی رو بنویسم. برای دکمه های موجود توی اکتیویتی دوم که به صورت دیالوگ فراخوانی میشه هم کد برای کلیک نوشته شده اما متاسفانه به هیچ وجه رویداد کلیک اتفاق نمیفته یا حداقل پروسه های نوشته شده براش اجرا نمیشن. و البته همونطور که توی کد هم معلومه برای OnCreate هم کد اجرا نمیشه .
من کد ها رو اینجا میزارم، لطفاً اساتید بزرگوار یه بررسی بکنن ببینن باید کد به چه صورت فراخوانی بشه که من بتونم رویداد کلیک رو کنترل کنم :

کد اول مربوط به اکتیویتی 1 :


public class MainActivity extends Activity {

private Button btnC;
protected Dialog dialog;
public void showActionMenu(){
dialog = new Dialog(MainActivity.this);
dialog.requestWindowFeature(Window.FEATURE_NO_TITL E);
dialog.setContentView(R.layout.actionmenu);
//dialog.setCanceledOnTouchOutside(false);
dialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT)) ;
dialog.show();
}



@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FL AG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.activity_main);
btnC = (Button)findViewById(R.id.btntest);

btnC.setOnClickListener(new OnClickListener() {
public void onClick(View arg0) {

showActionMenu();

}
});
}

}


اینم کد اکتیوتی دوم که من به صورت یه دیالوگ فراخوانیش می کنم :‌


public class actionmenu extends Activity {

//private Button btnC;
private ImageButton btncall;



@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FL AG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.actionmenu);
Toast.makeText(getApplicationContext(), "متن",Toast.LENGTH_LONG).show();
addListenerOnButton();
}

private void addListenerOnButton() {

btncall = (ImageButton) findViewById(R.id.ibtncall);
btncall.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(getApplicationContext(), "متن",Toast.LENGTH_LONG).show();
finish();
}
});
}


}

Nevercom
شنبه 24 آبان 1393, 19:53 عصر
من در کد مربوط به اکتیویتی اول کدی نمیبینم که اکتیویتی دوم رو فراخوانی کرده باشید.
درکل، اگر میخواید یک اکتیویتی با ظاهری شبیه دایالوگ نمایش داده بشه، در مانیفست تمی (Theme) رو براش تعریف کنید که از یکی از نسخه های Theme.Dialog مشتق شده باشه

شما فقط دارید Layout مربوط به اکتیویتی دوم رو در Dialog استفاده می کنید، همین

RealDream
یک شنبه 25 آبان 1393, 07:22 صبح
من در کد مربوط به اکتیویتی اول کدی نمیبینم که اکتیویتی دوم رو فراخوانی کرده باشید.
درکل، اگر میخواید یک اکتیویتی با ظاهری شبیه دایالوگ نمایش داده بشه، در مانیفست تمی (Theme) رو براش تعریف کنید که از یکی از نسخه های Theme.Dialog مشتق شده باشه

شما فقط دارید Layout مربوط به اکتیویتی دوم رو در Dialog استفاده می کنید، همین

ممنون از جوابتون .
با این حساب اگه من به صورت دیالوگ یه لی آوت رو صدا بزنم اکشناش جواب نمیدن ؟
اگه ممکنه بفرمائید فراخوانی به چه شکلی باشه با اون توضیحاتی که فرمودین .

tux-world
یک شنبه 25 آبان 1393, 09:00 صبح
منظورتون از اکشن چیه؟ یعنی باتن داشته باشید روش بتونید کلیک کنید؟ خوب چرا نمیشه

RealDream
یک شنبه 25 آبان 1393, 09:20 صبح
منظورتون از اکشن چیه؟ یعنی باتن داشته باشید روش بتونید کلیک کنید؟ خوب چرا نمیشه

دقیقا سوال من هم همینه چرا نمیشه
اگه نگاه کنید توی رویداد OnCreate هم یه Toast گذاشتم اونم نمایش داده نمیشه .

NeoFighT
یک شنبه 25 آبان 1393, 10:15 صبح
دقیقا سوال من هم همینه چرا نمیشه
اگه نگاه کنید توی رویداد OnCreate هم یه Toast گذاشتم اونم نمایش داده نمیشه .
شما اکشن هارو توی اکتیویتی تعریف میکنید
در این قسمت شما فقط layout رو نمایش دادید پس هیچ کدوم از باتن ها اکشن ندارن.

RealDream
یک شنبه 25 آبان 1393, 10:28 صبح
میشه بفرمائید این کد چطوری باید اصلاح بشه که بتونه به ایونت ها جواب بده ؟

pbm_soy
سه شنبه 27 آبان 1393, 01:26 صبح
شما اگر بخواهید یک لایوت را بصورت یک دیالوگ بازکنید (البته از طریق دستورات) همانطور که خودتان نوشتید درست است ولی باید listener های آنرا هم در زمان درستکردن دیالوگ در همان اکتیویتی اول باید بذارید با دیالوگ بیلدر (شاید کمی سخت باشه یا شما را کمی محدود کند)

ولی راه حل ساده تر همانطور که دوستمون Nevercom گفتن در مانیفست پروژه اکتیویتی دوم را از نوع دیالوگ معرفی کنید و اکتیویتی دوم را دقیقا مانند یک اکتیویتی معمولی کدنویسی کنید یعنی همین کاری که خودتون کردید

RealDream
سه شنبه 27 آبان 1393, 11:16 صبح
ممنون از همه دوستان که محبت کردن راهنمائي انجام دادن