رفتن به مطلب
  • 0

رفتن به یک اکتیویتی دیگر با کلیک روی آیتم ریسایکلر ویو


mohsenkhaan

سوال

با سلام

من در داخل متدonBindViewHolder ریسایکلر ویو برای یکی از ویوهای موجود در هر ردیف رویداد onclick تعریف کردم و میخوام وقتی روی اون ویو کلیک شد برم به یک اکتیویتی دیگه.ولی نمیدونم چرا به کمک اینتنت و StartActivity نمیشه این کار رو کرد.

اگر میشه راهنمایی کنید چگونه StartActivity رو توی آداپتر ریسایکلر ویو اجرا کنم.ممنون

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

9 پاسخ به این سوال تاکنون داده شده است

ارسال‌های توصیه شده

در 7 ساعت قبل، mohsenkhaan گفته است :

ممنون .با این فلگ درست شد.

یعنی از این به بعد توی ریسایکبر ویوها باید از این روش استفاده بشه؟

والا برام عجیب بود که گفته بود فلگ ست کنی

چون معمولا وقتی از بیرون برنامه یا از سرویس یا اینکه بخوای اینتنتی به بیرون از برنامه بفرستی فلگ ست میشه

حالا نمیدونم چی شده که گفته فلگ ست کنی. لاگ رو نگاه کنی نوشته باید این فلگ رو ست کنی . هروقت به این ارور برخوردی همینکارو بکن

تجربه میشه :دی

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

در در 1396/04/12, 08:19:41، محمدرضا شاهپیری گفته است :

دوست عزیز شما همین طوری نمیتونید هر جایی اکتیویتی استارت کنید. فقط context میتونه اکتیوتی استارت کنه. شما با استفاده از متد سازنده یه کانتکست به آداپتر بدین و با اون اکتیویتی استارت کنید.

شما به این صورت عمل کنید. آداپت رو به شکل زیر درست کنید


public class MyAdapter extends RecyclerView.Adapter<MyHolder> {
  privat Context context;
    public MyAdapter (Context context){
  		this.context=context;
    }
    @Override
    public MyHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        return null;
    }

    @Override
    public void onBindViewHolder(MyHolder holder, int position) {
        // inja baraye start kardane activity be shekle zir amal konid
  		context.startActivity(folan activity);
    }

    @Override
    public int getItemCount() {
        return 0;
    }
}

 

با سلام.

من قبلا با این روش میتونستم با کلیک روی یک آیتم ریسایکلر ویو به اکتیویتی دوم بروم ولی الان که دوباره از این روش استفاده کردم دیدم در اندرویدهای 6 و پایین تر برنامه فورس کلوز میده. ولی در اندروید 7 وبالا جواب میده. کسی از دوستان دلیل این مشکل رو میدونه؟

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

لاگ بگیرید ببینید چه خطایی میده
خطارو اینجا بذارید یا کدای اداپترتون رو بذارید که بدونیم چی به چیه:53:

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

 HostConnection::get() New Host Connection established 0xe2816120, tid 4282
I/OpenGLRenderer: Initialized EGL, version 1.4
D/OpenGLRenderer: Enabling debug mode 0
W/EGL_emulation: eglSurfaceAttrib not implemented
W/OpenGLRenderer: Failed to set EGL_SWAP_BEHAVIOR on surface 0xe2819220, error=EGL_SUCCESS
W/art: Before Android 4.1, method int android.support.v7.widget.ListViewCompat.lookForSelectablePosition(int, boolean) would have incorrectly overridden the package-private method in android.widget.ListView
W/EGL_emulation: eglSurfaceAttrib not implemented
W/OpenGLRenderer: Failed to set EGL_SWAP_BEHAVIOR on surface 0xed0ca280, error=EGL_SUCCESS
W/EGL_emulation: eglSurfaceAttrib not implemented
W/OpenGLRenderer: Failed to set EGL_SWAP_BEHAVIOR on surface 0xed0d59c0, error=EGL_SUCCESS
W/EGL_emulation: eglSurfaceAttrib not implemented
W/OpenGLRenderer: Failed to set EGL_SWAP_BEHAVIOR on surface 0xe380e040, error=EGL_SUCCESS
W/EGL_emulation: eglSurfaceAttrib not implemented
W/OpenGLRenderer: Failed to set EGL_SWAP_BEHAVIOR on surface 0xe2ed4e60, error=EGL_SUCCESS
W/Settings: Setting airplane_mode_on has moved from android.provider.Settings.System to android.provider.Settings.Global, returning read-only value.
D/AndroidRuntime: Shutting down VM
E/AndroidRuntime: FATAL EXCEPTION: main
                  Process: ir.rahyarmath.geolearn, PID: 4261
                  android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity  context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?
                      at android.app.ContextImpl.startActivity(ContextImpl.java:1240)
                      at android.app.ContextImpl.startActivity(ContextImpl.java:1227)
                      at android.content.ContextWrapper.startActivity(ContextWrapper.java:322)
                      at ir.rahyarmath.geolearn.Adapter$1.onClick(Adapter.java:63)
                      at android.view.View.performClick(View.java:4756)
                      at android.view.View$PerformClick.run(View.java:19749)
                      at android.os.Handler.handleCallback(Handler.java:739)
                      at android.os.Handler.dispatchMessage(Handler.java:95)
                      at android.os.Looper.loop(Looper.java:135)
                      at android.app.ActivityThread.main(ActivityThread.java:5221)
                      at java.lang.reflect.Method.invoke(Native Method)
                      at java.lang.reflect.Method.invoke(Method.java:372)
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)

بفرمایید.

اینهم کد رفتن به اکتیویتی دیگر

      holder.cardView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Toast.makeText(context, holder.title.getText()+"", Toast.LENGTH_SHORT).show();
String videoFrame=items.get(position).getFrame();
                Intent intent=new Intent(context,VideoPlayActivity.class);
               intent.putExtra("videoFrame",videoFrame);
           context.startActivity(intent);

 

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

در 4 ساعت قبل، mohsenkhaan گفته است :

بفرمایید.

اینهم کد رفتن به اکتیویتی دیگر

 

این کد رو به اینتنتتون اضافه کنید ببینید درست میشه یا نه

 

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

 

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

ممنون .با این فلگ درست شد.

یعنی از این به بعد توی ریسایکبر ویوها باید از این روش استفاده بشه؟

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

دوست عزیز شما همین طوری نمیتونید هر جایی اکتیویتی استارت کنید. فقط context میتونه اکتیوتی استارت کنه. شما با استفاده از متد سازنده یه کانتکست به آداپتر بدین و با اون اکتیویتی استارت کنید.

شما به این صورت عمل کنید. آداپت رو به شکل زیر درست کنید

public class MyAdapter extends RecyclerView.Adapter<MyHolder> {
  privat Context context;
    public MyAdapter (Context context){
  		this.context=context;
    }
    @Override
    public MyHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        return null;
    }

    @Override
    public void onBindViewHolder(MyHolder holder, int position) {
        // inja baraye start kardane activity be shekle zir amal konid
  		context.startActivity(folan activity);
    }

    @Override
    public int getItemCount() {
        return 0;
    }
}

 

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

ممنون جناب شاهپیری عزیز

درست شد ولی نمیدونم چرا سرعت رفتن به اکتیویتی اینقدر  کند هست؟من توی ریسایکلر ویو حدود35 ردیف دارم ولی با این وجود وقتی روی آیتم کلیک میکنم 4-5ثانیه طول میکشه تا اکتیویتی دوم بیاد.توی اون اکتیویتی هم چیز خاصی نیست غیر از یک ادیت باکس و دکمه که توی کاردویو هستند. بنظرتون دلیلش چی میتونه باشه؟

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

اکتیویتی در صورتی کند باز میشه که معولا به یکی از دلایل زیرمی باشه.

1- لود رکوردهای زیاد از دیتابیس و مثلا نمایش توی برنامه

2- انجام محاسبات سنگین قبل از ورود به اکتیویتی مثلا با زدن رو آیتمهای ریسایکلر بیاد توی یه دیتابیس چند صد رکوردی کوئری بزنه و یه مقدار بگیره و اونو به اکتیویتی بعد بفرسته. با وجود اینکه اکتیوتی چیز خاصی نداره ولی قبل از شروعش محاسبات زیادی انجام میشه که این باعث کند شدن میشه

3-دریافت اطلاعات زیاد از سرور بدون لیمیت دادن.

4- وجود تعداد زیاد ویو توی اکتیویتی.

اینها دلایل عمده هستن دلایل دیگه هم ممکنه باشه.

اگه بیخودی اکتیوتی تون کنده احتمالا به خاطر شبیه ساز یا گوشی ضعیفتونه. رو یه دیوایس متوسط به بالا تست کنید

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

بایگانی شده

این موضوع بایگانی و قفل شده و دیگر امکان ارسال پاسخ نیست.

  • کاربران آنلاین در این صفحه   0 کاربر

    • هیچ کاربر عضوی،در حال مشاهده این صفحه نیست.
×
×
  • اضافه کردن...