পিতামাতার ক্রিয়াকলাপ থেকে একটি খণ্ড পদ্ধতি কল করা


124

আমি অ্যান্ড্রয়েড ফ্রেগমেন্টস ডেভ গাইডে দেখতে পাচ্ছি যে "ক্রিয়াকলাপটি ফ্র্যাগমেন্টম্যানেজার থেকে ফ্রেগমেন্টের রেফারেন্স অর্জন করে findFragmentById()বা ব্যবহার করে একটি খণ্ডে পদ্ধতিগুলিকে কল করতে পারে findFragmentByTag()।"

নিম্নলিখিত উদাহরণটি দেখায় যে কীভাবে একটি খণ্ড রেফারেন্স পাওয়া যায়, তবে কীভাবে খণ্ডে নির্দিষ্ট পদ্ধতিগুলি কল করতে হয় তা নয়।

কেউ কীভাবে এটি করতে পারে তার উদাহরণ দিতে পারে? আমি পিতামাতার ক্রিয়াকলাপ থেকে কোনও খণ্ডে একটি নির্দিষ্ট পদ্ধতিতে কল করতে চাই। ধন্যবাদ।

উত্তর:


210

প্রশ্নটি খুব সহজ বলে ঠিক মতো পান না:

ExampleFragment fragment = (ExampleFragment) getFragmentManager().findFragmentById(R.id.example_fragment);
fragment.<specific_function_name>(); 

আপডেট: যারা কোটলিন ব্যবহার করছেন তাদের জন্য

var fragment = supportFragmentManager.findFragmentById(R.id.frameLayoutCW) as WebViewFragment
fragment.callAboutUsActivity()

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

34
আমি কীভাবে টুকরা আইডি পেতে পারি?
নরেন্দ্র সিং 11

8
এটি করে আমি একটি নাল বস্তুর রেফারেন্সে শেষ হয়ে গেলাম!
অলোক রাজাসুকুমারান

3
@ ফ্যাটি, আমার যদি টুকরো টুকরো ট্যাগ না থাকে?
ভ্যাক্লোভাস রেকিয়াস জুনিয়র

5
আমি এক্সএমএল তে টুকরো টুকরো ঘোষিত করিনি ... সুতরাং আমার কাছে ফ্র্যাগমেন্ট আইডি নেই, আমি কী করব ??
আকাশ বিএস

76

আপনি যদি "android.app.Fraament আমদানি" ব্যবহার করেন; তারপরে হয় ব্যবহার করুন:

1)

ExampleFragment fragment = (ExampleFragment) getFragmentManager().findFragmentById(R.id.example_fragment); 
fragment.specific_function_name(); 

যেখানে R.id.example_fraament সম্ভবত আপনার এক্সএমএল লেআউটের ভিতরে ফ্রেম লেআউট আইডি। অথবা

2)

ExampleFragment fragment = (ExampleFragment) getFragmentManager().findFragmentByTag(“FragTagName”); 
fragment.specific_function_name(); 

ফ্রেগটাগনাম আপনার নির্দিষ্ট করা নামটি যেখানে নির্দিষ্ট করেছেন:

TabHost mTabHost.newTabSpec(“FragTagName”)

যদি আপনি "আমদানি android.support.v4.app.Fraament ব্যবহার করেন;" তারপরে হয় ব্যবহার করুন:

1)

ExampleFragment fragment = (ExampleFragment) getSupportFragmentManager().findFragmentById(R.id.example_fragment); 
fragment.specific_function_name(); 

অথবা

2)

ExampleFragment fragment = (ExampleFragment) getSupportFragmentManager().findFragmentByTag(“FragTagName”); 
fragment.specific_function_name(); 

1
আমার একটি সমন্বয়কারী লেআউট আইডি R.id.example_fraament রয়েছে, এটির প্রত্যাবর্তন বাতিল returning আমি আমদানি android.support.v4.app.Fraament ব্যবহার করছি; কি করো?
কিশোর

আমি আপনাকে এটি একটি নতুন প্রশ্ন হিসাবে পোস্ট করার পরামর্শ দিচ্ছি এবং আপনার নমুনা কোডটি অন্তর্ভুক্ত করুন। আসল কোডটি না দেখে সমস্যার উত্সটি বলা শক্ত।
জিন

9

আপনি যদি কোনও সমর্থন গ্রন্থাগার ব্যবহার করছেন তবে আপনি এর মতো কিছু করতে চাইবেন:

FragmentManager manager = getSupportFragmentManager();
Fragment fragment = manager.findFragmentById(R.id.my_fragment);
fragment.myMethod();

4
  1. আপনি যদি কোনও সমর্থন লাইব্রেরি ফ্রেগমেন্ট ব্যবহার না করেন তবে নিম্নলিখিতগুলি করুন:

((FragmentName) getFragmentManager().findFragmentById(R.id.fragment_id)).methodName();


২. আপনি যদি কোনও সমর্থন লাইব্রেরি ফ্রেগমেন্ট ব্যবহার করেন তবে নিম্নলিখিতগুলি করুন:

((FragmentName) getSupportFragmentManager().findFragmentById(R.id.fragment_id)).methodName();


3

আমি মনে করি খন্ডে কল করার পদ্ধতি আগে খণ্ড যুক্ত করা হয়েছে কিনা তা পরীক্ষা করা ভাল। নাল ব্যতিক্রম এড়াতে এই জাতীয় কিছু করুন।

ExampleFragment fragment = (ExampleFragment) getFragmentManager().findFragmentById(R.id.example_fragment);
if(fragment.isAdded()){
  fragment.<specific_function_name>(); 
}

2

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

((YourActivityClassName)getActivity()).yourPublicMethod();

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

ফ্রেগমেন্টম্যানেজার এফএম = getSupportFraamentManager ();

//if you added fragment via layout xml
YourFragmentClass fragment = 
(YourFragmentClass)fm.findFragmentById(R.id.your_fragment_id);
fragment.yourPublicMethod();

যদি আপনি কোডের মাধ্যমে টুকরো যোগ করেন এবং আপনি যখন নিজের টুকরো যোগ করেন তখন ট্যাগ স্ট্রিং ব্যবহার করেন, পরিবর্তে ফাইন্ডমেন্টবাইটি্যাগ ব্যবহার করুন:

YourFragmentClass fragment = (YourFragmentClass)fm.findFragmentByTag("yourTag");

1

প্রথমে আপনি আপনার fragmentপছন্দ মতো পদ্ধতি তৈরি করুন

public void name()
{


}

আপনার মধ্যে activityআপনি এটি যোগ করুন

অ্যাড onCreate()পদ্ধতি

myfragment fragment=new myfragment()

আপনি যে পদ্ধতিতে এটি যুক্ত করতে চান সেখানে অবশেষে কল করুন

fragment.method_name();

এই কোড চেষ্টা করুন



1

আমি এটি সম্পর্কে জানি না Java, তবে C#(জ্যামারিন.এন্ড্রয়েড) এ যতবার এই পদ্ধতিতে কল করার দরকার আছে খণ্ডগুলি দেখার দরকার নেই, নীচে দেখুন:

public class BrandActivity : Activity
{
    MyFragment myFragment;

    protected override void OnCreate(Bundle bundle)
    {       
        // ...
        myFragment = new MyFragment();      
        // ...
    }

    void someMethod()
    {
        myFragment.MyPublicMethod();
    }
}

public class MyFragment : Android.Support.V4.App.Fragment
{
    public override void OnCreate(Bundle bundle)
    {
        // ...
    }

    public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle bundle)
    {
        // ...
    }

    public void MyPublicMethod()
    {
        // ...
    }   
}

আমি মনে করি আপনি Javaএকই কাজ করতে পারেন।


1

আপনি যেমন ইন্টারফেস ব্যবহার করে টুকরা পদ্ধতি কল

প্রথমে আপনি ইন্টারফেস তৈরি করুন

public interface InterfaceName {
    void methodName();
}

ইন্টারফেস তৈরির পরে আপনি আপনার খণ্ডে ইন্টারফেস প্রয়োগ করবেন

MyFragment extends Fragment implements InterfaceName {
    @overide
    void methodName() {

    }
}

এবং আপনি আপনার ক্রিয়াকলাপে ইন্টারফেসের রেফারেন্স তৈরি করেন

class Activityname extends AppCompatActivity {
    Button click;
    MyFragment fragment;

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity);

        click = findViewById(R.id.button);

        fragment = new MyFragment();

        click.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
               fragment.methodName();
            }
        });
    }
}

0
((HomesFragment)getSupportFragmentManager().findFragmentById(R.id.fragment_container)).filterValidation();
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.