0

Ich versuche, eine Bildergalerie mit View Pager zu erstellen. Aber ich erhalte eine Fehlermeldung Kann Methode 'show (android.support.v4.app.FragmentTransaction, java.lang.String) nicht lösen' für newFragment.show(ft, "slideshow"); Ich habe ähnliche Fragen im Zusammenhang mit Fragment Manager gelesen, aber sie helfen nicht viel als Ich bin ein Neuling und ich benutze FragmentTransaction nicht FragmentManager. Kann mir jemand helfen, es zu reparieren?Kann die Methode 'show (android.support.v4.app.FragmentTransaction, java.lang.String) nicht auflösen'

import android.app.Fragment; 
import android.app.ProgressDialog; 
import android.os.Bundle; 
import android.support.v4.app.FragmentManager; 
import android.support.v4.app.FragmentTransaction; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.widget.Toolbar; 
import android.util.Log; 
import android.view.View; 

import org.json.JSONArray; 
import org.json.JSONException; 
import org.json.JSONObject; 

import android.support.v7.widget.DefaultItemAnimator; 
import android.support.v7.widget.GridLayoutManager; 
import android.support.v7.widget.RecyclerView; 

import com.android.volley.Response; 
import com.android.volley.VolleyError; 
import com.android.volley.toolbox.JsonArrayRequest; 

import java.util.ArrayList; 

public class MainActivity extends AppCompatActivity { 

    private String TAG = MainActivity.class.getSimpleName(); 
    private static final String endpoint = "http://demos.vetbossel.in/ajson/image.json"; 
    private ArrayList<Image1> images; 
    private ProgressDialog pDialog; 
    private GalleryAdapter mAdapter; 
    private RecyclerView recyclerView; 

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

     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 

     recyclerView = (RecyclerView) findViewById(R.id.recycler_view); 

     pDialog = new ProgressDialog(this); 
     images = new ArrayList<>(); 
     mAdapter = new GalleryAdapter(getApplicationContext(), images); 

     RecyclerView.LayoutManager mLayoutManager = new GridLayoutManager(getApplicationContext(), 2); 
     recyclerView.setLayoutManager(mLayoutManager); 
     recyclerView.setItemAnimator(new DefaultItemAnimator()); 
     recyclerView.setAdapter(mAdapter); 

     recyclerView.addOnItemTouchListener(new GalleryAdapter.RecyclerTouchListener(getApplicationContext(), recyclerView, new GalleryAdapter.ClickListener() { 
      @Override 
      public void onClick(View view, int position) { 
       Bundle bundle = new Bundle(); 
       bundle.putSerializable("images", images); 
       bundle.putInt("position", position); 

       FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); 
       SlideshowDialogFragment newFragment = SlideshowDialogFragment.newInstance(); 
       newFragment.setArguments(bundle); 
       newFragment.show(ft,"tag"); 
      } 

      @Override 
      public void onLongClick(View view, int position) { 

      } 
     })); 

     fetchImages(); 
    } 

    private void fetchImages() { 

     pDialog.setMessage("Loading Images..."); 
     pDialog.show(); 

     JsonArrayRequest req = new JsonArrayRequest(endpoint, 
       new Response.Listener<JSONArray>() { 
        @Override 
        public void onResponse(JSONArray response) { 
         Log.d(TAG, response.toString()); 
         pDialog.hide(); 

         images.clear(); 
         for (int i = 0; i < response.length(); i++) { 
          try { 
           JSONObject object = response.getJSONObject(i); 
           Image1 image = new Image1(); 


           JSONObject url = object.getJSONObject("url"); 
           image.setSmall(url.getString("small")); 
           image.setMedium(url.getString("medium")); 
           image.setLarge(url.getString("large")); 


           images.add(image); 

          } catch (JSONException e) { 
           Log.e(TAG, "Json parsing error: " + e.getMessage()); 
          } 
         } 

         mAdapter.notifyDataSetChanged(); 
        } 
       }, new Response.ErrorListener() { 
      @Override 
      public void onErrorResponse(VolleyError error) { 
       Log.e(TAG, "Error: " + error.getMessage()); 
       pDialog.hide(); 
      } 
     }); 

     // Adding request to request queue 
     AppController.getInstance().addToRequestQueue(req); 
    } 
} 
+0

hinzugefügt 'import android.support.v4.app.Fragment;' ?? –

+0

ja ich tat, ich habe die Frage jetzt aktualisiert @IntelliJAmiya –

+0

können Sie Importe von 'SlideshowDialogFragment' Klasse zeigen? –

Antwort

0

Eigentlich ist Problem Ihre SlideshowDialogFragment Klasse. In Android gibt es zwei DialogFragment

  1. android.support.v4.app.DialogFragment
  2. android.app.DialogFragment

als SlideshowDialogFragment Klasse 2. ein verlängern, man kann android.support.v4.app.FragmentTransaction verwenden.

Lösung lautet SlideshowDialogFragment Klasse und ersetzen import android.app.DialogFragment; durch import android.support.v4.app.DialogFragment;. Jetzt wird alles gut funktionieren.

+0

das ist richtig, danke :) –

1

Versuchen Sie so;

Fragment fragment = new SlideshowDialogFragment(); 
    FragmentManager fm =getActivity().getSupportFragmentManager(); 
    FragmentTransaction ft = fm.beginTransaction(); 
    ft.replace(R.id.content_frame, fragment); 
    ft.commit(); 

    Bundle bundle = new Bundle(); 
    bundle.putSerializable("images", images); 
    bundle.putInt("position", position); 

fragment.setArguments(bundle); 
+0

Was ist mDataset? –

+0

Ich bearbeite meinen Code @Amy ... Schau das und bewerben Sie sich und vergessen Sie nicht zu upvote und haken meine Antwort –

0

Was sind Ihre Importe an der Spitze Ihrer Klasse? Sie sollten so android.support.v4.app.Fragment; und android.support.v4.app.FragmentTransaction; wie sein importieren:

import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentTransaction; 
+0

Ich importiere beide, ich habe die Frage jetzt aktualisiert –

+0

An der Spitze Ihrer Klasse bist du importierender Import android.app.Fragment; anstelle von android.support.v4.app.Fragment; – lidkxx

+0

@Amy Entfernen 'importieren android.app.Fragment;' –

Verwandte Themen