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

ارسال اینترفیس (interface) توسط intent به یک اکتیویتی (حل نشده)

سپهر  11 سال پیش  11 سال پیش
0 0

من یک اینترفیسی دارم که به عنوان 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);
                    }
                }
0 0
ممنون از مثال شما ، من هم از همین روش استفاده می کنم اما کاری که من میخوام بکنم این هست که لیسنر رو در کلاس override کنم نه در اکتیویتی ، و در اکتیویتی فقط مقداردهیش کنم که جوابش رو در کلاس لاگ کنم ، که در این صورت یا باید لیسنر رو استاتیک تعریف کنم تا در اکتیویتی بهش دسترسی داشته باشم یا باید با اینتنت لیسنرمو پاس بدم به اکتیویتی (11 سال پیش)
0 0
لیسنر رو میتوید به صورت نستد درون یک کلاس تعریف کنید و در کلاس های دیگه صداش بزنید . (11 سال پیش)
0 0
متوجه منظورتون نشدم لطف میکنی بیشتر توضیح بدی (11 سال پیش)
0 0
البته فعلن در حال حاضر مجبور شدم لیسنرم رو پکیج استاتیک تعریف کنم تا یک راه حل بهتری براش پیدا کنم (11 سال پیش)
0 0
میتونید براش متد Get ، Set بنویسید و از اکتیویتی مقداردهی کنید، یا میتونید پارامتر ورودی به کانستراکتور بدید در مورد قسمت اول هم شما از هر جایی میتونید این اینترفیس رو فراخوانی کنید، توی هر کلاسی هم میتونید لاگ ارسال کنید. (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) {

}
};

}
}

 

0 0
متوجه منظور من نشدید ، من نمیخوام لیسنر جدیدی new کنم میخوام از همون لیسنر ساخته شده در کلاس ، داخل اکتیویتی مقداردهی کنم (11 سال پیش)

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