aminsh77

مشکل در استفاده از interface

9 ارسال در این موضوع قرار دارد

با سلام

من برای ارتباط بین اکتیویتی و فراگمنت از interface استفاده کردم به شکل زیر:

کدهای فراگمنت:

public class Fragment_one extends Fragment {


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.one_fragment, container, false);

        return view;
    }

    public interface message {
        public void showName(int name);
    }


    @Override
    public void onResume(){
        super.onResume();
        //OnResume Fragment
        ((message) getContext()).showName(1);
    }
}

 

و کد های اکتویتی:

 

public class MainActivity extends AppCompatActivity implements
        Fragment_one.message,
        Fragment_two.message,
        Fragment_three.message{

    Toolbar toolbar;
    int fragment_number;


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


        toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        toolbar.setTitle(getString(R.string.app_name));
  
      
      
        //// مشکل
      
      //// چون خارج از متد showname هست
      /// مقدار name رو نمیگیره
      
        int a =   fragment_number; 
      
        System.out.println("Fragment-Num :" + a);
      
      //// مشکل

    }





    @Override
    public void showName(int name) {

        fragment_number = name;
         /// این چون داخل متد showName هست
      ///مشکلی نداره و کار میده
        System.out.println("Fragment :" + fragment_number);


    }


    }

 

 

کد به خوبی کار میده و مشکل من اینه اون مقدار عددی showName رو وقتی توی  fragment_number خارج از متد showName مقدار رو نمیگیره

اون قسمتی که نوشتم مشکل رو میگم تو کد های اکتیویتی

 

حالا چجور اون مقدار رو خارج از متد بگیرم؟؟

 

لطفا راهنماییم کنید خیلی گیرم

 

با تشکر

به اشتراک گذاری این پست


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

دوستان کسی بلد نیست مشکلمو حل کنه؟؟

خیلی گیرم لطفا اگر بلدید کمک کنید

با تشکر

به اشتراک گذاری این پست


لینک به ارسال
به اشتراک گذاری در سایت های دیگر
در 8 ساعت قبل، aminsh77 گفته است :

دوستان کسی بلد نیست مشکلمو حل کنه؟؟

خیلی گیرم لطفا اگر بلدید کمک کنید

با تشکر

سلام دوست عزیز خوب مشکلتون مشخصه

شما تو این قسمت 

   int fragment_number;

      
        int a =   fragment_number; 

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

ولی قسمت پایین شما اومدین متد showName رو override کردین که میاد مقدار name که بهش میدین میگیره و به fragment_number میده.

کد شما به درستی داره کار میکنه از لحاظ منطقی.

هدف شما از این که به این صورت نوشتین چی بوده و قرار بوده چه کاری انجام بدین؟

1 کاربر پسند دیده است

به اشتراک گذاری این پست


لینک به ارسال
به اشتراک گذاری در سایت های دیگر
در 10 ساعت قبل، a.khosroabadi گفته است :

سلام دوست عزیز خوب مشکلتون مشخصه

شما تو این قسمت 


   int fragment_number;

      
        int a =   fragment_number; 

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

ولی قسمت پایین شما اومدین متد showName رو override کردین که میاد مقدار name که بهش میدین میگیره و به fragment_number میده.

کد شما به درستی داره کار میکنه از لحاظ منطقی.

هدف شما از این که به این صورت نوشتین چی بوده و قرار بوده چه کاری انجام بدین؟

سلام

ببینید میدونم اون مقداری نداره

الان مشکل اینجاست مقداری name رو خارج متد showname نمیشه استفاده کرد فقط داخل متد showname مقدار رو میشه گرفت 

 

هدف من اینه که وقتی توی اون فراگمنت بودم یک مقدار عددی به اکتیویتی مادر ارسال بشه که دو راه داشتم یا استفاده از shared perfrence یا interface که interface از هر نظر هم منطقی تره هم بهتر

 

الان من میخوام اون مقدار name رو توی اینتیحر خارج از متد showname ذخیره کنم

الان fragment_number فقط داخل متد showname مقدار name رو میگیره و دیگه خارج از اون متد showname خالیه و مقداری نداره

 

اگر لازمه بگید بیشتر توضیح بدم

 

با تشکر

به اشتراک گذاری این پست


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

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

به اشتراک گذاری این پست


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

هیچ کس بلد نیست؟

خیلی گیر اینم

به اشتراک گذاری این پست


لینک به ارسال
به اشتراک گذاری در سایت های دیگر
در 18 ساعت قبل، aminsh77 گفته است :

هیچ کس بلد نیست؟

خیلی گیر اینم

خوب فقط کافیه مقدار بازگشتی متد showName تغییر بدین و چیزی که میخواین بزارین مثلا اگه قراره Integer برگرده بزارین 

 public interface message {
        public Integer showName(int name);
    }

 

به اشتراک گذاری این پست


لینک به ارسال
به اشتراک گذاری در سایت های دیگر
در در 1396/05/14, 07:30:03، a.khosroabadi گفته است :

خوب فقط کافیه مقدار بازگشتی متد showName تغییر بدین و چیزی که میخواین بزارین مثلا اگه قراره Integer برگرده بزارین 


 public interface message {
        public Integer showName(int name);
    }

 

ببینید الان این با اون کد خودم فرقی نمیکنه دوتاش رو باید Override کرد و فقط داخل

@Override
public Integer showName(int name) {
    fragment_number = name;
    System.out.println("fragg =" + fragment_number);
    return null;
}

مقدار name رو برمیگردونه

من میخوام از مقدار name به شکل زیر استفاده کنم

 

public class MainActivity extends AppCompatActivity implements
        Fragment_one.message,
        Fragment_two.message,
        Fragment_three.message{

    Toolbar toolbar;
    int fragment_number;


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


        toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        toolbar.setTitle(getString(R.string.app_name));
  
      
      
     
       
      
      

    }





    @Override
    public Integer showName(int name) {

        fragment_number = name;
       
        System.out.println("Fragment :" + fragment_number);


    }
    @Override
    public void onBackPressed() {

            if(fragment_number == 1){
            
             //code
            
            
            }else if(fragment_number == 2){
            
            //code
            
            
            }else if(fragment_number == 3){
            
              
              //code
            
            }
 

            super.onBackPressed();
        }


    }

 

حالا چجوری مقدار name رو توی onBackPressed استفاده کنم ؟

به اشتراک گذاری این پست


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

مشکل رو پیدا کردم و حل شد ختم تاپیک

به اشتراک گذاری این پست


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

برای ارسال نظر یک حساب کاربری ایجاد کنید یا وارد حساب خود شوید

برای اینکه بتوانید نظر ارسال کنید نیاز دارید که کاربر سایت شوید

ایجاد یک حساب کاربری

برای حساب کاربری جدید در انجمن ما ثبت نام کنید. عضویت خیلی ساده است !


ثبت نام یک حساب کاربری جدید

ورود به حساب کاربری

دارای حساب کاربری هستید؟ از اینجا وارد شوید


ورود به حساب کاربری

  • مطالب مشابه

    • توسط soroush80
      سلام دستان من به یه مشکلی خوردم من یه battom barدرست کردم و خب چند تا فرگمنت براش قرار دادم الان میخوام تو یکی از فرگمنت هام  toolbarبزارم نه تو کل برنامه اما چون فایل جاوای اون activity من به صورت extends fragmentهست خیلی از خواصAppCompatActivity رو نداره به همین خاطر نمیتونم toolbarرو بهش اظافه کنم میخواستم اگه میشه یا یه روش بهم بگید که fragment هم خواصAppCompatActivity رو پیدا کنه یا یه راه حل بهم بدید.
      خیلی ممنون.
    • توسط MaHdI-09
      سلام.من دوتا فرگمنت دارم که توی یک ویوپیجر هستش.میخوام هر بار که اسلاید کردم روی هر اکتیویتی یک کار خاصی انجام بشه.
      از onPause,onStart هم استفاده کردم اما نشد.
      ممنون میشم پاسخ بدید
       
    • توسط razzagh2826
      سلام ببخشید چه جوری میتونم تو کاسی از نوع فرگیم دکمه اینها تعریف کنم و باهاش کار کنم
      ؟؟
      کلاس من از این نوع است؟؟
      public class CreateFragment extends Fragment {
      public CreateFragment() {
      }
       
    • توسط alizare
      با سلام
      در طراحی یک viewpager با چند فرگمنت که قابلیت افزودن فرگمنت و حذف آنها بصورت داینامیک باشه به مشکل بر خوردم
      همه کد ها بخوبی کار میکنند بجز کد مربوط به حذف فرگمنت
      البته اگر از آخرین فرگمنت شروع به حذف فرگمنت ها کنیم مشکلی پیش نمیاد
      ولی اگه مثلا 5 فرگمنت داشته باشیم و بخواهیم فرگمنت شماره 2 را حذف کنیم ، فرگمنت حذف می شود ولی جای فرگمت خالی می ماند و با سوئیپ روی این فرگمنت برنامه به مشکل میخوره
      در عکس پیوست فرگمنت دو حذف شده ولی جای خالی آن باقی مانده
      کدی که برای حذف فرگمنت استفاده کردم به شکل زیر هست
      public void removeFrag(int position) { removeTab(position); Fragment fragment = mFragmentList.get(position); viewPager.removeView(fragment.getView()); mFragmentList.remove(fragment); mFragmentTitleList.remove(position); notifyDataSetChanged(); getSupportFragmentManager().beginTransaction().remove(fragment).commit(); getSupportFragmentManager().beginTransaction().detach(fragment).commit(); } ممنون میشم هر چه زودتر در این مورد راهنماییم کنید
      با تشکر از سایت خوبتون

    • توسط Omid Zakeri
      اینترفیس یک نوع قرارداد است. هر کلاس می‌تواند یک یا چند اینترفیس را به‌کار گیرد و پیاده‌سازی (implement) کند. کلاسی که یک اینترفیس را پیاده‌سازی کند باید قواعد تعریف شده در آن را رعایت کند.
      در عمل اینترفیس ساختاری مانند کلاس دارد که تعدادی متد در آن تعریف می‌شوند اما این متدها بدنه ندارند و فقط امضای آن‌ها تعریف شده است. کلاسی که یک اینترفیس را پیاده‌سازی می‌کند باید تمام متدهای موجود در آن اینترفیس را Override کند.
      متدهای موجود در یک اینترفیس بدنه‌ای ندارند و بنابراین مشخص نیست که چه کاری انجام می‌دهند. هر کلاسی که اینترفیس را پیاده‌سازی می‌کند می‌تواند به شکل دلخواه خود بدنه آن متد را تعریف کنند.
       
      دومین تعریف و شاید تعریف بهتر این است ‌که اینترفیس راهی برای توصیف مجموعه‌ای از کلاس‌ها است. فرض کنید اینترفیسی داریم که متدهای مربوط به کار با شبکه در آن تعریف شده‌‌اند. حال می‌توانیم کلاس‌هایی که این اینترفیس را پیاده‌سازی می‌کنند به عنوان کلاس‌هایی که با شبکه کار می‌کنند گروه‌بندی و توصیف کنیم.
      همچنین متغیرهایی که در interface تعریف میشوند همه آنها سه قابلیت زیر را دارند:
      همه آنها public هستند. همه آنها static هستند. همه آنها final هستند. Interface Class
      public interface MyTestInterface { void testFunctionOne(); void testFunctionTwo(); }  
      هر کلاس میتواند یک یا چندین interface را implements کند. با این کار کلاس ما موظف میشود تمام متدهای که در interface تعریف شده و بدون بدنه هستند را پیاده سازی کامل کند. نکته آخر اینکه همانند کلاس interface ها هم میتوانند همدیگر را extends کنند.
      package com.coderzheaven.interfacetest1; import android.app.Activity; import android.os.Bundle; public class MainActivity extends Activity implements MyTestInterface { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } @Override public void testFunctionOne() { System.out.println("Print from testFunctionOne in the Interface"); } @Override public void testFunctionTwo() { System.out.println("Print from testFunctionTwo in the Interface"); } }  

  • دوره آموزشی اندروید ایران کانادا آموزش ویدئویی اندروید آموزش برنامه نویسی اندروید اندروید کاپ دوره آنلاین اندروید کتاب های آموزشی اندروید بسته آموزشی اندروید دوره برنامه نویسی اندروید آموزش Kotlin آموزش برنامه نویسی ios
  • فایل