Ashok Mandal
Ashok Mandal

Reputation: 278

FrescoImageViewer: java.lang.IllegalStateException: You need to use a Theme.AppCompat theme

I am trying to use fresco image viewer, But I am getting this error, when click listener is being executed

java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.
at android.support.v7.app.AppCompatDelegateImplV9.createSubDecor(AppCompatDelegateImplV9.java:355)
at android.support.v7.app.AppCompatDelegateImplV9.ensureSubDecor(AppCompatDelegateImplV9.java:324)
at android.support.v7.app.AppCompatDelegateImplV9.setContentView(AppCompatDelegateImplV9.java:285)
at android.support.v7.app.AppCompatDialog.setContentView(AppCompatDialog.java:83)
at android.support.v7.app.AlertController.installContent(AlertController.java:225)
at android.support.v7.app.AlertDialog.onCreate(AlertDialog.java:257)
at android.app.Dialog.dispatchOnCreate(Dialog.java:397)
at android.app.Dialog.show(Dialog.java:298)
at com.stfalcon.frescoimageviewer.ImageViewer.show(ImageViewer.java:61)
at com.stfalcon.frescoimageviewer.ImageViewer$Builder.show(ImageViewer.java:435)
at com.unobridge.www.unobridgepartner.view.service_detail.adapters.QueryImageGalleryAdapter$1.onClick(QueryImageGalleryAdapter.java:67)
at android.view.View.performClick(View.java:5207)
at android.view.View$PerformClick.run(View.java:21177)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5441)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:738)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:628)

And Code in Adapter, Adapter has the context of the activity, which is again passed to FrescoImageViewer :

holder.simpleDraweeView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Log.d(TAG, holder.getAdapterPosition()+" ");
            new ImageViewer.Builder<>(context,fileMaps)
                    .setFormatter(new ImageViewer.Formatter<FileMap>(){
                        @Override
                        public String format(FileMap fileMap) {
                            return fileMap.getUrls().get(0).getUrl();
                        }
                    })
                    .show();
        }
    });

Activity Code :

package com.unobridge.www.unobridgepartner.view.service_detail.activities;

import android.content.Context;
import android.content.Intent;
import android.databinding.DataBindingUtil;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.DefaultItemAnimator;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.MenuItem;

import com.facebook.drawee.backends.pipeline.Fresco;
import com.unobridge.www.unobridgepartner.R;
import com.unobridge.www.unobridgepartner.databinding.ActivityQueryImageGalleryBinding;
import com.unobridge.www.unobridgepartner.model.FileMap;
import com.unobridge.www.unobridgepartner.model.Ticket;
import com.unobridge.www.unobridgepartner.view.service_detail.adapters.QueryImageGalleryAdapter;
import com.unobridge.www.unobridgepartner.viewmodel.service_detail.activities.QueryImageGalleryViewModel;

import java.util.List;

public class QueryImageGalleryActivity extends AppCompatActivity {

    private static final String TICKET_DATA = "ticket_data";
    private ActivityQueryImageGalleryBinding binding;
    private QueryImageGalleryViewModel queryImageGalleryViewModel;
    private QueryImageGalleryAdapter queryImageGalleryAdapter;

    private List<FileMap> fileMaps;

    public static Intent newIntent(Context context, Ticket ticket){
        Intent intent = new Intent(context, QueryImageGalleryActivity.class);
        intent.putExtra(TICKET_DATA, ticket);
        return intent;
    }



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

        Ticket ticket = getIntent().getParcelableExtra(TICKET_DATA);


        binding = DataBindingUtil.setContentView(this, R.layout.activity_query_image_gallery);
        queryImageGalleryViewModel = new QueryImageGalleryViewModel(getApplicationContext(), ticket);
        binding.setViewModel(queryImageGalleryViewModel);

        queryImageGalleryAdapter = new QueryImageGalleryAdapter(getApplicationContext(), ticket.getQueryImages());

        Fresco.initialize(this);

        RecyclerView.LayoutManager layoutManager = new GridLayoutManager(getApplicationContext(), 2);
        binding.queryImageRecyclerView.setLayoutManager(layoutManager);
        binding.queryImageRecyclerView.setItemAnimator(new DefaultItemAnimator());
        binding.queryImageRecyclerView.setAdapter(queryImageGalleryAdapter);


        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setTitle("Query Image Gallery");


    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case android.R.id.home:
                super.onBackPressed();
        }

        return super.onOptionsItemSelected(item);
    }
}

Upvotes: 0

Views: 577

Answers (1)

OneCricketeer
OneCricketeer

Reputation: 192023

You need to use the AppCompatActivity themes set to the context of the Activity, which it seems your application is not using

Replace all getApplicationContext() with QueryImageGalleryActivity.this (the current Activity / context)

Upvotes: 3

Related Questions