কোনও খণ্ড থেকে কোনও ক্রিয়াকলাপ শুরু করুন


91

দুটি টুকরোতে একটি বোতামের সাথে আমার 2 টুকরা রয়েছে। আমি বোতাম টিপলে আমি একটি নতুন ক্রিয়াকলাপ শুরু করতে চাই। কিন্তু আমি এটি কাজ করতে পারি না।

আমি যে ত্রুটিটি পাচ্ছি: এখানে ত্রুটি

আমি কি ভুল করছি?

মাইফ্রেগমেন্টপেজারএডাপ্টার

import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;

public class MyFragmentPagerAdapter extends FragmentPagerAdapter{

    final int PAGE_COUNT = 3;

    /** Constructor of the class */
    public MyFragmentPagerAdapter(FragmentManager fm) {
        super(fm);
    }

    /** This method will be invoked when a page is requested to create */
    @Override
    public Fragment getItem(int arg0) {

        switch(arg0){

        case 0:
            return new FavoriteActivity();
                    //ERROR: Type mismatch: cannot convert from FavoriteActivity to Fragment


        case 1:
            return new SettingsActivity();


        default:
            return null;

        }       
    }

    /** Returns the number of pages */
    @Override
    public int getCount() {
        return PAGE_COUNT;
    }
}

পছন্দের কাজ

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;

public class FavoriteActivity extends Activity{

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


        OnClickListener listnr=new OnClickListener() {
            @Override
            public void onClick(View v) {
                  Intent i= new Intent("aFavorite");
                  startActivity(i);
            }
        };

          Button btn =(Button) v.findViewById(R.id.mainFavorite);
          btn.setOnClickListener(listnr);

          return v;
    }
}

যদি ফেভারিটএ্যাক্টিভিটি খণ্ডগুলি প্রসারিত করে তবে ত্রুটিটি চলে গেছে তবে আমি ত্রুটি পেয়েছি findViewById(R.id.mainFavorite);এবং ত্রুটিটি

ফাইভ ভিউআইআইডি (ইন্ট) পদ্ধতিটি ফেভারিটএকটিভিটি টাইপের জন্য অপরিজ্ঞাত

সম্পাদনা:

ক্রিয়াকলাপ শুরু করতে আমি যখন খণ্ডে বোতাম টিপব তখন অ্যাপটি ক্র্যাশ করে এটি আমার লগক্যাট

03-18 16:01:23.985: E/AndroidRuntime(1985): FATAL EXCEPTION: main
03-18 16:01:23.985: E/AndroidRuntime(1985): android.content.ActivityNotFoundException: No Activity found to handle Intent { act=FavoriteActivityList }
03-18 16:01:23.985: E/AndroidRuntime(1985):     at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1569)
03-18 16:01:23.985: E/AndroidRuntime(1985):     at android.app.Instrumentation.execStartActivity(Instrumentation.java:1420)
03-18 16:01:23.985: E/AndroidRuntime(1985):     at android.app.Activity.startActivityForResult(Activity.java:3446)
03-18 16:01:23.985: E/AndroidRuntime(1985):     at android.app.Activity.startActivityForResult(Activity.java:3407)
03-18 16:01:23.985: E/AndroidRuntime(1985):     at android.support.v4.app.FragmentActivity.startActivityFromFragment(FragmentActivity.java:826)
03-18 16:01:23.985: E/AndroidRuntime(1985):     at android.support.v4.app.Fragment.startActivity(Fragment.java:838)
03-18 16:01:23.985: E/AndroidRuntime(1985):     at com.example.spui.FavoriteActivity$1.onClick(FavoriteActivity.java:24)
03-18 16:01:23.985: E/AndroidRuntime(1985):     at android.view.View.performClick(View.java:4211)
03-18 16:01:23.985: E/AndroidRuntime(1985):     at android.view.View$PerformClick.run(View.java:17267)
03-18 16:01:23.985: E/AndroidRuntime(1985):     at android.os.Handler.handleCallback(Handler.java:615)
03-18 16:01:23.985: E/AndroidRuntime(1985):     at android.os.Handler.dispatchMessage(Handler.java:92)
03-18 16:01:23.985: E/AndroidRuntime(1985):     at android.os.Looper.loop(Looper.java:137)
03-18 16:01:23.985: E/AndroidRuntime(1985):     at android.app.ActivityThread.main(ActivityThread.java:4898)
03-18 16:01:23.985: E/AndroidRuntime(1985):     at java.lang.reflect.Method.invokeNative(Native Method)
03-18 16:01:23.985: E/AndroidRuntime(1985):     at java.lang.reflect.Method.invoke(Method.java:511)
03-18 16:01:23.985: E/AndroidRuntime(1985):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1006)
03-18 16:01:23.985: E/AndroidRuntime(1985):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:773)
03-18 16:01:23.985: E/AndroidRuntime(1985):     at dalvik.system.NativeStart.main(Native Method)

4
সম্ভবত আপনি খণ্ড খণ্ডন না বরং খণ্ড প্রসারিত করা উচিত?
স্প্যান

4
ভাল, যার জন্য আপনি ব্যবহার করছেন না Fragments। আপনার পোস্ট করা কোডটিতে কমপক্ষে কোনও নেই।
adneal

উত্তর:


247

mFragmentFavoriteআপনার কোড এ FragmentActivityযা একটি হিসাবে একই জিনিস নয় Fragment। এ কারণেই আপনি টাইপটি মেলে না। এছাড়াও, আপনার কখনই ফোন newকরা উচিত নয় Activityকারণ এটি শুরু করার উপযুক্ত উপায় নয়।

আপনি যদি একটি নতুন উদাহরণ শুরু করতে চান তবে আপনি এটির mFragmentFavoriteমাধ্যমে এটি করতে পারেন Intent

একটি থেকে Fragment:

Intent intent = new Intent(getActivity(), mFragmentFavorite.class);
startActivity(intent);

একটি হতে Activity

Intent intent = new Intent(this, mFragmentFavorite.class);
startActivity(intent);

আপনি যদি এর aFavoriteপরিবর্তে আরম্ভ করতে চান mFragmentFavoriteতবে আপনাকে কেবল তাদের তৈরি করা নামগুলি পরিবর্তন করতে হবে Intent

এছাড়াও, আমি আরও যথার্থ হতে আপনার শ্রেণীর নাম পরিবর্তন করার পরামর্শ দিচ্ছি। কিছু কলিং mFragmentFavoriteমধ্যে যে এটি একটি নয় অনুপযুক্ত হয় Fragmentএ সব। এছাড়াও, জাভাতে শ্রেণীর ঘোষণা সাধারণত মূলধনির সাথে শুরু হয় with আপনার শ্রেণীর নামকরণের জন্য FavoriteActivityআপনি আরও সঠিক হতে চান এবং ভাষা সম্মেলনের সাথে মানিয়ে নিতে চান। আপনার যদি জাভা শ্রেণীর নামগুলি ফাইলের নামের সাথে মেলে প্রয়োজন হয় তবে আপনি যদি এটি করতে চান তবে আপনার ফাইলটির নাম ফেভারিটএকটিভিটি.জভাতে রাখতে হবে।

হালনাগাদ

এছাড়া, এটিও মনে হচ্ছে আপনি আসলে জন্য বোঝানো mFragmentFavoriteএকটি হতে Fragmentপরিবর্তে একটি FragmentActivityআপনার ব্যবহারের উপর ভিত্তি করে onCreateView। আপনি যদি mFragmentFavoriteএকটি হতে চান Fragmentতবে নিম্নলিখিত কোডের লাইনটি পরিবর্তন করুন:

public class mFragmentFavorite extends FragmentActivity{

পরিবর্তে এটি পড়ুন:

public class mFragmentFavorite extends Fragment {

ঠিক আছে, আমি প্রথম পোস্টে কোড আপডেট করব। তবে আমি mContextReferences বেশ বুঝতে পারি না। আমি আমার যা আছে এবং আরও ভাল নাম দিয়ে কোডটি আপডেট করব, আমাকে 5 মিনিট
এমএক্সএক্স

এটি একটি Fragmentবা এর একটি রেফারেন্সের উদাহরণ Activity। আপনি ঐ শ্রেণীর এক কোড ভিতরে ব্যবহার করেন, তাহলে তারপর আপনি শুধু প্রতিস্থাপন করতে পারেন mContextReferenceসঙ্গে পারেন getActivity()জন্য Fragmentঅথবা thisজন্য Activityপ্রথম লাইন এবং thisদ্বিতীয় লাইন জন্য। উত্তরটি আরও পরিষ্কার হওয়ার জন্য আপডেট করব।
মাইকেল স্লে

ঠিক আছে, আমি আরও ভাল নাম এবং আপনি আমাকে যে পরামর্শ দিয়েছিলেন তা দিয়ে প্রশ্নটি আপডেট করেছি। আমি আপনার পরামর্শটি এটি প্রয়োগ করে কার্যকর করার জন্য এখনই চেষ্টা করব। সহায়তার জন্য ধন্যবাদ
এমএক্সএক্স

হ্যাঁ আমি এটিকে আবার
টুকরো টুকরো করে ফেলেছি

4
আপনি যদি এটি তৈরি করেন Fragmentতবে এতে পরিবর্তন findViewByIdকরুন v.findViewById। কোনও findViewByIdফাংশন নেই Fragmentতাই আপনাকে getViewপ্রথমে কল করতে হবে তারপরে কল findViewByIdকরতে হবে। আপনার ক্ষেত্রে যদিও, আপনার ইতিমধ্যে আপনার দৃষ্টিভঙ্গি আছে onCreateViewএবং এটি আপনার পরিবর্তনশীল হবে v
মাইকেল সেলি

21

getActivity()খণ্ডগুলি থেকে ক্রিয়াকলাপ শুরু করতে আপনার ব্যবহার করা উচিত

Intent intent = new Intent(getActivity(), mFragmentFavorite.class);
startActivity(intent);

এছাড়াও, আপনার ক্যাপগুলি সহ ক্লাসের নামকরণ করা উচিত: MFragmentActivityপরিবর্তে mFragmentActivity


4

আপনি যদি getActivity () ব্যবহার করে থাকেন তবে আপনাকে অবশ্যই নিশ্চিত করতে হবে যে কলিং ক্রিয়াকলাপটি ইতিমধ্যে যুক্ত হয়েছে। যদি সেক্ষেত্রে ক্রিয়াকলাপটি যুক্ত না করা থাকে তবে আপনি getActivity () কল করার সময় আপনি শূন্য হয়ে যেতে পারেন

এই ক্ষেত্রে getContext () নিরাপদ

তারপরে ক্রিয়াকলাপ শুরু করার কোডটি কিছুটা পরিবর্তিত হবে যেমন,

Intent intent = new Intent(getContext(), mFragmentFavorite.class);
startActivity(intent);

তাই আপনি ব্যবহার করতে পারেন কার্যকলাপ, সার্ভিস ও অ্যাপ্লিকেশন ContextWrapper বর্গ প্রসারিত এই বা getContext () বা getApplicationContext () প্রথম আর্গুমেন্ট স্থানে।


'আপনি যদি getActivity () ব্যবহার করে থাকেন তবে আপনার কলিং ক্রিয়াকলাপটি ইতিমধ্যে যুক্ত হয়েছে তা নিশ্চিত করতে হবে .- এই লাইনটি কোনও নবাগতকে কী বোঝায়?
পলক জৈন

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

ঠিক আছে, এটা বোঝা যায়। ধন্যবাদ!
পলক জৈন

3

আমি আমার খণ্ডে এটি ব্যবহার করি।

Button btn1 = (Button) thisLayout
            .findViewById(R.id.btnDb1);

    btn1.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            Intent intent = new Intent(getActivity(), otherActivity.class);
            ((MainActivity) getActivity()).startActivity(intent);

        }
    });

    return thisLayout;
}

0

আপনাকে এই বিষয়ে সমস্যাযুক্তদের জন্য মেইনএকটিভিটির সাথে getActivity () প্রতিস্থাপন করতে হবে।


0

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

Intent intent = new Intent(getActivity(), TargetActivity.class);
startActivity(intent);

একটি ক্রিয়াকলাপ থেকে নতুন ক্রিয়াকলাপ শুরু করুন:

Intent intent = new Intent(this, TargetActivity.class);
startActivity(intent);

0

কোটলিন সহ আমি এই কোডটি কার্যকর করি:

requireContext().startActivity<YourTargetActivity>()


আমি যখন এই কোডটি চেষ্টা করি তখন পাই:None of the following functions can be called with the arguments supplied. startActivity(Intent!) defined in android.content.Context startActivity(Intent!, Bundle?) defined in android.content.Context
টিম

@ টিম কোডটি কাজ করার জন্য আপনার সম্ভবত অ্যান্ড্রয়েড কেটিএক্স দরকার হবে ।
এড্রিক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.