بروز خطا
[message]
اشتراک در سوال
رای ها
[dataList]
ارسال اینترفیس (interface) توسط intent به یک اکتیویتی (حل نشده)
من یک اینترفیسی دارم که به عنوان listener ازش استفاده میکنم
میخوام این اینترفیسمو از داخل یک کلاس پاس بدم به اکتیویتی و اونجا مقدار دهی کنم و داخل کلاسم اون رو گسترش بدم
آیا این امکان وجود داره؟
0
0
این امکان وجود داره، ولی برای بهینه شدن کاراییتون یک کلاس بسازید و به اون ورودی و خروجی بدید، شما نباید کل اینترفیس رو ارسال کنید، بلکه فقط خروجی را ارسال کنید. (11 سال پیش)
0
0
لطف میکنی بیشتر راهنمایی کنی ، اگر با کد مثال بزنی ممنون میشم (11 سال پیش)
0
0
پارامتر های ورودی و خروجی اینترفیستون و اینکه کجا ازش استفاده میکنید رو به سوال اضافه کنید تا بهتر بتونیم راهنماییتون کنیم.الان من نمیدونم شما میخواید چیکار کنید که با کد براتون مثال بزنم که! (11 سال پیش)
0
0
در پاسخ بعدی تمام اطلاعات رو فرستادم (11 سال پیش)
0
0
آموزش های خانه اندروید کار با لیسنر ها رو مطالعه کنید به جواب میرسید . (11 سال پیش)
برای این سوال 3 پاسخ وجود دارد.
پاسخ به سوال
سپهر
11 سال پیش
0
0
من یک کلاس دارم که همون اینترفیسم هست
public interface OnCloseListener {
public void closed(boolean skiped);
}
و یک کلاس دارم که از طریق اون میخوام اینتنت بفرستم
OnCloseListener sn = new OnCloseListener() {
@Override
public void closed(boolean skiped) {
// TODO Auto-generated method stub
Log.i("TRACE", skiped + "$$$$$$$$$$$$$$$$$$$$");
}
};
intent.putExtra("signal", sn);
_context.startActivity(intent);
و اکتیویتی دارم که اینتنتو میگیره و مقدار دهی میکنه
onCloseListener = (OnCloseListener) getIntent().getSerializableExtra("signal");
onCloseListener.closed(true);
پاسخ به سوال
Hajhosseini
11 سال پیش
0
0
ببینید این نمونه کدی هست که استاد توی آموزش ماژول وب سرویس استفاده کردن
در کلاس ModuleWebservice
public static interface Listener {
public void onDataReceive(String data);
public void onFail(int statusCode);
}
در اکتیویتی
ModuleWebservice module = new ModuleWebservice();
ModuleWebservice.Listener listener = new ModuleWebservice.Listener() {
@Override
public void onDataReceive(String data) {
Log.i("LOG", "Webservice Data: " + data);
}
@Override
public void onFail(int statusCode) {
switch (statusCode) {
case ModuleWebservice.IO_EXCEPTION:
Log.i("LOG", "IO Exception");
break;
case ModuleWebservice.PROTOCOL_EXCEPTION:
Log.i("LOG", "PROTOCOL Exception");
break;
case ModuleWebservice.UNKNOWN_EXCEPTION:
Log.i("LOG", "UNKNOWN Exception");
break;
}
}
};
و در کلاس ModuleWebservice دیتا به این صورت پاس داده میشه
if (listener != null) {
listener.onDataReceive(data);
return;
}
یا
catch (ClientProtocolException e) {
if (listener != null) {
listener.onFail(PROTOCOL_EXCEPTION);
}
}
catch (IOException e) {
if (listener != null) {
listener.onFail(IO_EXCEPTION);
}
}
catch (Exception e) {
if (listener != null) {
listener.onFail(UNKNOWN_EXCEPTION);
}
}
ممنون از مثال شما ، من هم از همین روش استفاده می کنم اما کاری که من میخوام بکنم این هست که لیسنر رو در کلاس override کنم نه در اکتیویتی ، و در اکتیویتی فقط مقداردهیش کنم که جوابش رو در کلاس لاگ کنم ، که در این صورت یا باید لیسنر رو استاتیک تعریف کنم تا در اکتیویتی بهش دسترسی داشته باشم یا باید با اینتنت لیسنرمو پاس بدم به اکتیویتی (11 سال پیش)
پاسخ به سوال
کاشی زاده
11 سال پیش
+2
0
شما میتونید در کلاس مثلا A یک اینترفیس به صورت نستد تعریف کنید به شکل زیر :
public class A {
public interface interfaceA {
public void getName(String name);
}
}
بعد میتونید در یک کلاس دیگه و یا یک اکتیوتی دیگه از این اینترفیس استفاده کنید حالا یا متدش رو صدا کنید و خبری بدید و یا خبری رو بگیرید .
public class B extends Activity {
private interfaceA listener;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.b);
listener = new interfaceA() {
@Override
public void getName(String name) {
}
};
}
}
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .