একটি খণ্ড এবং এর ধারক ক্রিয়াকলাপের মধ্যে ডেটা পাস করা


176

আমি কীভাবে কোনও খণ্ড এবং এর ধারক ক্রিয়াকলাপের মধ্যে ডেটা পাস করতে পারি? ক্রিয়াকলাপগুলির মধ্যে ক্রিয়াকলাপগুলির মধ্যে ডেটা পাস করার মতো কিছু আছে কি?

আমি এটি পড়েছি, তবে এটি খুব একটা উপকার করতে পারেনি:


এটা কি অপর্যাপ্ত? আপনি যা চান তা প্রেরণ করতে পারেন, আপনি আরও ব্যাখ্যা করতে পারেন, আপনি কী অর্জন করতে চান?
মার্সিন মাইলজস্কি

দস্তাবেজ থেকে আমি বুঝতে পারি নি কীভাবে, উদাহরণস্বরূপ, আমি ক্রিয়াকলাপ থেকে খণ্ড বা বিপরীতে কোনও মান বা একটি স্ট্রিং পাস করব। ধন্যবাদ
tyb

2
টুকরোগুলি থেকে অ্যাসিঙ্ক্রোনালি কলগুলি এবং তাদের ডেটা ফিরিয়ে আনার সর্বোত্তম উপায় হ'ল উভয় পক্ষের ব্রডকাস্টআরসিভারগুলি প্রয়োগ করা। আপনি যদি অ-নির্দিষ্ট সংখ্যক টুকরোগুলির সাথে কাজ করে থাকেন তবে আপনাকে এটিকে অবিচ্ছিন্ন করতে হবে।
মারেক সেবেরা

@ পুনিশার_ম্যালাদ নং, আমার পক্ষে কাজ করে
ভাদিম কোতোভ

উত্তর:


211

আপনার খণ্ডে আপনি কল করতে পারেন getActivity()

এটি আপনাকে সেই ক্রিয়াকলাপে অ্যাক্সেস দেবে যা খণ্ডটি তৈরি করেছে। সেখান থেকে আপনি অবশ্যই ক্রিয়াকলাপে থাকা কোনও প্রকারের অ্যাকসেসর পদ্ধতিতে কল করতে পারেন।

যেমন getResult()আপনার ক্রিয়াকলাপে ডাকা একটি পদ্ধতির জন্য :

((MyActivity) getActivity()).getResult();

86
যেহেতু আপনি আপনার ক্রিয়াকলাপের মধ্যে কোনও ফাংশন অ্যাক্সেস করছেন (এবং প্যারেন্ট অ্যান্ড্রয়েড ক্রিয়াকলাপ নয়) আপনাকে আপনার getActivity () কল করতে হবে: ((MyActivity) getActivity ()) getResult ();
নিক

3
খণ্ড থেকে শুরু করে ক্রিয়াকলাপ পর্যন্ত কীভাবে সম্ভবত পিছনের পদ্ধতি হবে?
ভাসিল ভালচেভ

6
@ ভ্যাসিভালচেভ, আপনি একটি ইন্টারফেস তৈরি করতে এবং ক্রিয়াকলাপটিকে এটি প্রয়োগ করতে বাধ্য করতে এবং তারপরে আপনার খণ্ডের মধ্যে থেকে কোনও পদ্ধতি কল করে ডেটা পাস করতে পারেন। ক্রিয়াকলাপটি ইন্টারফেসটি প্রয়োগ করে কিনা তা পরীক্ষা করতে অন্যাটচ পদ্ধতি ব্যবহার করুন।
ইভান নিকোলভ

3
@ ইভাননিকোলভের দুর্দান্ত উত্তর আপনি খণ্ডগুলি প্রশিক্ষণ লিঙ্কে
বোগদান

8
এটি একটি ভাল অনুশীলন বা প্যাটার্ন নয়। ইন্টারফেসের সাথে উত্তরটি সঠিক।
moictab

303

ইন্টারফেস ব্যবহার করার চেষ্টা করুন।

যে কোনও টুকরোগুলি যাতে ডেটাটি এতে থাকা ক্রিয়াকলাপে ফিরে যেতে পারে সেগুলি ডেটা পরিচালনা ও পাস করার জন্য একটি ইন্টারফেস ঘোষণা করবে declare তারপরে নিশ্চিত হয়ে নিন যে আপনার ধারণিত ক্রিয়াকলাপটি সেই ইন্টারফেস প্রয়োগ করে। উদাহরণ স্বরূপ:

জাভা

আপনার খণ্ডে, ইন্টারফেসটি ঘোষণা করুন ...

public interface OnDataPass {
    public void onDataPass(String data);
}

তারপরে, অন্যাটাক পদ্ধতিতে ইন্টারফেসের বিভাজনযুক্ত সংযুক্ত শ্রেণীর প্রয়োগটি সংযুক্ত করুন, এর মতো:

OnDataPass dataPasser;

@Override
public void onAttach(Context context) {
    super.onAttach(context);
    dataPasser = (OnDataPass) context;
}

আপনার খণ্ডের মধ্যে, যখন আপনাকে ডেটা পাসিং পরিচালনা করতে হবে, কেবল এটি ডেটাপ্যাসার অবজেক্টে কল করুন:

public void passData(String data) {
    dataPasser.onDataPass(data);
}

অবশেষে, আপনার সমন্বিত ক্রিয়াকলাপে যা প্রয়োগ করে OnDataPass ...

@Override
public void onDataPass(String data) {
    Log.d("LOG","hello " + data);
}

KOTLIN

পদক্ষেপ 1. ইন্টারফেস তৈরি করুন

interface OnDataPass {
    fun onDataPass(data: String)
}

পদক্ষেপ ২। তারপরে, অন্টাচ পদ্ধতিতে (আপনারফ্রেগমেন্ট) বিভাজনের সাথে ইন্টারফেসের ধারণামূলক শ্রেণীর প্রয়োগটি সংযুক্ত করুন, এর মতো:

lateinit var dataPasser: OnDataPass

override fun onAttach(context: Context) {
    super.onAttach(context)
    dataPasser = context as OnDataPass
}

পদক্ষেপ ৩. আপনার খণ্ডের মধ্যে, যখন আপনাকে ডেটা পাসিং পরিচালনা করতে হবে, কেবল এটি ডেটাপ্যাসার অবজেক্টে কল করুন:

fun passData(data: String){
    dataPasser.onDataPass(data)
}

পদক্ষেপ 4. অবশেষে, আপনার ক্রিয়াকলাপে অনডেটাপাস প্রয়োগ করে

class MyActivity : AppCompatActivity(), OnDataPass {}

override fun onDataPass(data: String) {
    Log.d("LOG","hello " + data)
}

1
ধন্যবাদ ভাল উত্তর, বিন্দু। এটি এখানে খুব সুন্দরভাবে ব্যাখ্যা করা হয়েছে । আমি যা বুঝতে পারি নি তা হ'ল আপনি একাধিক ইন্টারফেস প্রয়োগ করতে পারেন, আমি ইতিমধ্যে একটি বাস্তবায়ন করছিলাম ActionBar.TabListenerএবং একটি অতিরিক্ত ইন্টারফেস যুক্ত করতে হয়েছিল।
ইউজিন ভ্যান ডের মেরভে

5
এটি অবশ্যই যাওয়ার উপায় এবং আমার মতে কেবলমাত্র একমাত্র পথ way এবং ক্রিয়াকলাপ এবং খণ্ডের মধ্যে দ্বিপাক্ষিক ইন্টারঅ্যাকশন সরবরাহ করে। আপনি যখন কোনও কার্যকলাপে একাধিক টুকরো টব বা মাল্টি টুকরো বিন্যাসের মধ্য দিয়েই টুকরো টুকরো টুকরো টুকরো টুকরো মধ্যে যোগাযোগ করার অনুমতি দেবে তাও দেয়।
ক্রিস্টোফার

1
আমি ভাবছি এমন কিছু আছে ... এটিই অফিশিয়াল উত্তর, এবং অফিসিয়াল বিকাশকারী সাইট থেকে তারা বলেছে এটি টুকরা-অ্যাক্ট-ফ্রিকে সংশ্লেষ করার সঠিক উপায়, তবে গিটারঅ্যাক্টিভিটি কাস্টিংয়ের মাধ্যমে এটি কেন সম্ভব কেন? )?
আনমલ્ટিমিডিও

3
কারো কেন এটি করার জন্য অতিরিক্ত ইন্টারফেসের প্রয়োজন? আপনি নীচের সমাধানটিকে খারাপ বা আপনার সমাধানটিকে আরও ভাল কেন বিবেচনা করেন? ((MyActivity) getActivity) .myMethod (...)
spacifici

3
অনআটাচ (ক্রিয়াকলাপ ক্রিয়াকলাপ) হ্রাস করা হয়েছে, পরিবর্তে অনটচ (প্রসঙ্গে প্রসঙ্গ) ব্যবহার করুন।
ক্রিস.সি

23

সহজ পদ্ধতির তবে প্রস্তাবিত নয়

আপনি খণ্ড থেকে ক্রিয়াকলাপ ডেটা অ্যাক্সেস করতে পারেন:

কার্যক্রম:

public class MyActivity extends Activity {

    private String myString = "hello";

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

    public String getMyData() {
        return myString;
    }
}

টুকরা:

public class MyFragment extends Fragment {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        MyActivity activity = (MyActivity) getActivity();
        String myDataFromActivity = activity.getMyData();
        return view;
    }
}

5
এটি আপনার কোডে উচ্চ সংযুক্তিকে যুক্ত করে এবং এটি একটি খারাপ অভ্যাস। এখন আপনি কোন ব্যতীত অন্য কার্যকলাপে অসম্পূর্ণ অংশ ব্যবহার করতে পারবেন নাMyActivity
AmeyaB

কেন এই উপায়টিকে খারাপ অনুশীলন হিসাবে বিবেচনা করা হয় এবং ইন্টারফেসটিই কেবল এই প্রশ্নের সমাধান?
অ্যান্ড্রয়েডএক্সপি

AmeyaB যদি সমস্ত ক্রিয়াকলাপ বেসঅ্যাক্টিভিটি থেকে প্রসারিত হয় এবং আমরা এটিকে বেসএটিভিটি ক্রিয়াকলাপের মতো (= বেসঅ্যাক্টিভিটি) getActivity (); তাহলে এটি সমস্ত ক্রিয়াকলাপে কাজ করবে
জার ই আহমের

21
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    Bundle b = getActivity().getIntent().getExtras();
            wid = b.getString("wid");
            rid = b.getString("rid");
            View view = inflater.inflate(R.layout.categoryfragment, container, false);
    return view;
 }

14
এটি খণ্ডে এটি কীভাবে পাবেন, তবে আপনার যদি এক্সএমএল লেআউট ফাইলে আপনার টুকরো থাকে তবে আপনি এটি কীভাবে ক্ল্যাগে সেট করবেন।
Zapnologica

17

একটি খণ্ড এবং এর ধারক ক্রিয়াকলাপের মধ্যে ডেটা পাস করা

কার্যক্রম:

        Bundle bundle = new Bundle();
        bundle.putString("message", "Alo Elena!");
        FragmentClass fragInfo = new FragmentClass();
        fragInfo.setArguments(bundle);
        transaction.replace(R.id.fragment_single, fragInfo);
        transaction.commit();

টুকরা:

খণ্ডে মান পড়া

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        String myValue = this.getArguments().getString("message");
        ...
        ...
        ...
        }

হ্যালো কীভাবে আমি ক্রিয়াকলাপ থেকে টুকরোয় বান্ডিল ডেটা পাঠাতে পারি। আমি টুকরা থেকে ক্রিয়াকলাপে চলে গিয়েছিলাম এবং আমাকে ইতিমধ্যে তৈরি করা খণ্ডে ফিরে যেতে হবে (কেবলমাত্র অন্টার্ট, অনারেসিউম, ...) কল করতে হবে এবং সেই ডেটা দরকার যা আমি ক্রিয়াকলাপে অর্জন করতে পেরেছিলাম। এটি করার কোনও উপায় আছে বা আমি কিছু ভুল করছি?
মিশাল মোরাভিক

7

আমি জানি না এটি সবচেয়ে ভাল উপায় বা না আমি গুগলে বেশ কিছুক্ষণ অনুসন্ধান করে যাচ্ছিলাম যে আমি কীভাবে কোনও বান্ডিলকে কোনও খণ্ড থেকে তার ধারক ক্রিয়াকলাপে পাস করতে পারি তবে আমি যা কিছু পেয়েছি তার পরিবর্তে ক্রিয়াকলাপ থেকে খণ্ডে ডেটা প্রেরণ করছিলাম (যা আমি নবাগত হিসাবে আমার জন্য কিছুটা বিভ্রান্তিকর হয়েছিল)।

পরে আমি আমার নিজস্ব কিছু চেষ্টা করেছি যা আমার জন্য ঠিক যেমন কাজ করেছিল ঠিক তেমনভাবে কাজ করে। সুতরাং আমি এখানে পোস্ট করব আমার মতো কেও একই জিনিসটির সন্ধান করছে।

// টুকরা থেকে ডেটা পাসিং।

Bundle gameData = new Bundle();
        gameData.putStringArrayList(Constant.KEY_PLAYERS_ARR,players);
        gameData.putString(Constant.KEY_TEAM_NAME,custom_team_name);
        gameData.putInt(Constant.KEY_REQUESTED_OVER,requestedOver);

        Intent intent = getActivity().getIntent();
        intent.putExtras(gameData);

// এটির ধারক ক্রিয়াকলাপ থেকে বান্ডিল থেকে ডেটা নেওয়া।

Bundle gameData = getIntent().getExtras();
        if (gameData != null)
        {
            int over = gameData.getInt(Constant.KEY_REQUESTED_OVER);
            ArrayList<String> players = gameData.getStringArrayList(Constant.KEY_PLAYERS_ARR);
            String team = gameData.getString(Constant.KEY_TEAM_NAME);

        }
        else if (gameData == null)
        {
            Toast.makeText(this, "Bundle is null", Toast.LENGTH_SHORT).show();
        }

6

ইন্টারফেস একটি সেরা সমাধান:

আঠালো ইন্টারফেস:

public interface DataProviderFromActivity {

    public String getName();
    public String getId);

}  

MyActivity:

public class MyActivity implements DataProviderFromActivity{

    String name = "Makarov";
    String id = "sys533";

    ... ... ... ... ... .... .... 
    ... ... ... ... ... .... .... 

    public String getName(){
        return name;
    };
    public String getId(){
        return id;
    };
}

MyFragment:

public class MyFragment extends Fragment{

    String fragName = "";
    String fragId = "";

    ... ... ... ... ... .... .... 
    ... ... ... ... ... .... .... 

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);

        DataProviderFromActivity myActivity= (DataProviderFromActivity) getActivity();
        fragName = myActivity.getName();
        fragId = myActivity.getId();

        ... ... ... ... ... .... .... 
        ... ... ... ... ... .... .... 

        updateFragmentView();
    }
}

হাই @ হাসানমাকারোভ আমি আপনার ইন্টারফেসটি সহজ এবং পরিষ্কার পছন্দ করি। যদিও আমার একটা সমস্যা আছে। আমি জানি না এটি আমার ভিউপ্যাজারের সাথে নির্দিষ্ট কিনা তবে আমি একবারে কেবলমাত্র 2 টি টুকরোতে ডেটা পাই? ক্রিয়াকলাপটি তৈরি হওয়ার পরে "মাকারভ" এবং "সিএস 353" স্ট্রিংগুলি টুকরা 1 এবং 2 তে উপস্থিত হয় তবে খণ্ড 2 বা 3 অবধি নির্বাচিত না হওয়া অবধি স্ট্রিং 3 খণ্ডে উপস্থিত হয় না? কোন ধারনা?
জেসি 23

@ জেসি 23 আমার ধারণা, সমস্যাটি খণ্ডের লেনদেনের সাথে সম্পর্কিত। মেইনএ্যাকটিভিটি চালু হওয়ার সময় কোন খণ্ড সেট করা আছে?
হাসান তারেক

@ জেসি 23 আমি কী করব: ট্যাব / ভিউপ্যাজারের পরিবর্তে আমি সরঞ্জামদণ্ড এবং নেভিগেশনভিউ ব্যবহার করি। অন্যাভিগেশনআইটেমসিলিগ্রেটেড () এ আমি সেই অনুযায়ী খণ্ডগুলি সেট করতে খণ্ডের লেনদেন করি।
হাসান তারেক

2

আমি এমন একটি অ্যাপকম্প্যাটঅ্যাক্টিভিটি ব্যবহার করেছি যা তারিখ শ্রোতাদের প্রয়োগ করে। আমার একটি তারিখের ব্যাপ্তি নির্বাচককে কোড করার প্রয়োজনের ফলে খণ্ডগুলি একটি প্রয়োজনীয়তা হিসাবে আসে। এবং আমার পিতামাতার ক্রিয়াকলাপে ফিরিয়ে আনার জন্য নির্বাচিত তারিখগুলি গ্রহণ করার জন্য আমারও ধারক প্রয়োজন needed

ধারক ক্রিয়াকলাপের জন্য, এটি শ্রেণির ঘোষণা:

public class AppCompatDateRange extends AppCompatActivity implements
    DateIniRangeFragment.OnDateIniSelectedListener, DateFimRangeFragment.OnDateFimSelectedListener

এবং কলব্যাকগুলির জন্য ইন্টারফেসগুলি:

@Override
public void onDateIniSelected(String dataIni) {
    Log.i("data inicial:", dataIni);
}

@Override
public void onDateFimSelected(String dataFim) {
    Log.i("data final:", dataFim);
}

কলব্যাকগুলি স্ট্রিং কারণ তারিখগুলি একটি কোয়েরি নির্বাচনের প্যারাম।

খণ্ডগুলির জন্য কোড (প্রাথমিক তারিখের খণ্ডের ভিত্তিতে):

public class DateIniRangeFragment extends Fragment {
OnDateIniSelectedListener callbackIni;

private DatePicker startDatePicker;

public DateIniRangeFragment() {
    ///required empty constructor
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
}

///through this interface the fragment sends data to the container activity
public interface OnDateIniSelectedListener {
    void onDateIniSelected(String dataIni);
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    ///layout for the fragment
    View v = inflater.inflate(R.layout.date_ini_fragment, container, false);

    ///initial date for the picker, in this case, current date
    startDatePicker = (DatePicker) v.findViewById(R.id.start_date_picker_appcompat);
    Calendar c = Calendar.getInstance();
    int ano = c.get(Calendar.YEAR);
    int mes = c.get(Calendar.MONTH);
    int dia = c.get(Calendar.DAY_OF_MONTH);
    startDatePicker.setSpinnersShown(false);
    startDatePicker.init(ano, mes, dia, dateSetListener);

    return v;
}

///listener that receives the selected date
private DatePicker.OnDateChangedListener dateSetListener = new DatePicker.OnDateChangedListener() {
    public void onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
        if (view.isShown()) { ///if the datepicker is on the screen
            String sDataIni = year + "-" + (monthOfYear + 1) + "-" + dayOfMonth;
            callbackIni.onDateIniSelected(sDataIni); //apply date to callback, string format
        }
    }
};

@Override
public void onAttach(Activity activity) {
    super.onAttach(activity);

    /*
    * this function guarantees that the container activity implemented the callback interface
    * */
    try {
        callbackIni = (OnDateIniSelectedListener) activity;
    } catch (ClassCastException e) {
        throw new ClassCastException(activity.toString() + " deve implementar OnDateIniSelectedListener");
    }
}

}

ধারক + টুকরা রচনা করতে, আমি কাস্টম ক্লাসের সাথে একটি ভিউপাগার (অ্যাপকম্প্যাট) ব্যবহার করেছি যা ফ্রেগমেন্টপেজারএডাপ্টার প্রসারিত করে। কোনও সংলাপ নেই।


2

সহজভাবে আপনি ইভেন্টবাস ব্যবহার করতে পারেন এটি সহজ এবং দুর্দান্ত কাজ

ইভেন্ট পদ 3 পদক্ষেপে

  1. ইভেন্টগুলি সংজ্ঞায়িত করুন:

    public static class MessageEvent { /* Additional fields if needed */ }

  2. সাবস্ক্রাইবার প্রস্তুত করুন: আপনার সাবস্ক্রাইব করার পদ্ধতিটি ঘোষণা করুন এবং এ্যানোটেট করুন optionচ্ছিকভাবে একটি থ্রেড মোড নির্দিষ্ট করুন:

    @Subscribe(threadMode = ThreadMode.MAIN)
    public void onMessageEvent(MessageEvent event) {/* Do something */};

নিবন্ধভুক্ত করুন এবং আপনার গ্রাহক নিবন্ধন করুন। অ্যান্ড্রয়েডে উদাহরণস্বরূপ, ক্রিয়াকলাপ এবং টুকরা সাধারণত তাদের জীবনচক্র অনুযায়ী নিবন্ধভুক্ত করা উচিত:

 @Override
 public void onStart() {
     super.onStart();
     EventBus.getDefault().register(this);
 }

 @Override
 public void onStop() {
     super.onStop();
     EventBus.getDefault().unregister(this);
 }
  1. ইভেন্ট পোস্ট করুন:

    EventBus.getDefault().post(new MessageEvent());


1

আমি জানি এই দেরি হতে পারে। তবে আমিও সবসময় এই প্রশ্নে হারিয়েছি। আমি এই লিঙ্কটি ভাগ করছি ... কারণ এটি সম্ভবত এটিই সবচেয়ে ভাল ব্যাখ্যা যা ওয়েবে আমি এর জন্য খুঁজে পেয়েছি। এটি খণ্ডটিকে ক্রিয়াকলাপে এবং টুকরো টুকরো টুকরোকে সমাধান করে !

সমাধান এবং সত্যই ভাল ব্যাখ্যা


0

এটি আমার জন্য কাজ করছে ..

ক্রিয়াকলাপে এই পদ্ধতিটি যুক্ত করুন

    public void GetData(String data)
     {
        // do something with your data        
     }

এবং খণ্ডে এই লাইন যুক্ত করুন

((YourActivity)getContext).GetData("your data here");

0
public class Fragmentdemo extends Fragment {

  public interface onDemoEventListener {
    public void demoEvent(String s);
  }

  onDemoEventListener demoEventListener;

  @Override
  public void onAttach(Activity activity) {
    super.onAttach(activity);
        try {
          demoEventListener = (onDemoEventListener) activity;
        } catch (ClassCastException e) {
            throw new ClassCastException(activity.toString() + " must implement onDemoEventListener");
        }
  }

  final String LOG_TAG = "TAG";

  public View onCreateView(LayoutInflater inflater, ViewGroup container,
      Bundle savedInstanceState) {
    View v = inflater.inflate(R.layout.fragmentdemo, null);

    Button button = (Button) v.findViewById(R.id.button);
    button.setOnClickListener(new OnClickListener() {
      public void onClick(View v) {
        demoEventListener.someEvent("Test text to Fragment1");
      }
    });
    enter code here
    return v;
  }
}

-12

ধারক ক্রিয়াকলাপের খণ্ডে অন্য ক্রিয়াকলাপ থেকে পাস করে ডেটাগুলি পাওয়ার আরও একটি সহজ উপায়: উদাহরণস্বরূপ:

ক্রিয়াকলাপ_এ => ক্রিয়াকলাপ_বি (খণ্ড)

আপনার ক্রিয়াকলাপ_এ আপনি এমন একটি উদ্দেশ্য তৈরি করেছেন যেমন আপনি অন্য ক্রিয়াকলাপে ডেটা (এখানে স্ট্রিং) প্রেরণ করছেন:

Intent intent = new Intent(getBaseContext(),Activity_B.class);
intent.putExtra("NAME", "Value");
startActivity(intent);

আপনার ক্রিয়াকলাপ_বিতে অন্তর্ভুক্ত আপনার খণ্ডে:

String data = getActivity().getIntent().getExtras();

getBaseContext()আমাকে নিম্নলিখিত ত্রুটিটি দেয়:The method getBaseContext() is undefined for the type new View.OnClickListener(){}
Si8
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.