2016-09-03 7 views
0

, um die Detailansichtsaktivität in Fragment auf Bildschaltfläche anzuzeigen. Ich verschiebe meinen Code von Activity, um ihn unter Fragmentansicht zu verwenden. Das Raster enthält mehrere Bilder, die erfolgreich im Fragment angezeigt werden. Ich versuche, eine Detailansicht basierend auf dem angeklickten Bild anzuzeigen. Aber ich bin dazu nicht in der Lage, dies zu tun, habe verschiedene Möglichkeiten ausprobiert, aber den einen oder anderen Fehler erzeugt. Früher hatte ich setContentView, was anscheinend nicht funktioniert, wenn es für Fragment verwendet wird. Ich bringe das Fragment bereits unter der OnCreateView-Methode auf, bin mir aber nicht sicher, wie mit der Detailansicht auf das Bild geklickt werden soll.Klicken Sie auf

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.fragment_one, container, false); 
    int iconSize=getResources().getDimensionPixelSize(android.R.dimen.app_icon_size); 

    CustomGrid adapter = new CustomGrid(view.getContext(), iconSize); 
    GridView gridview = (GridView) view.findViewById(R.id.grid); 
    gridview.setAdapter(adapter); 

    gridview.setOnItemClickListener(new AdapterView.OnItemClickListener() { 

     @Override 
     public void onItemClick(AdapterView<?> parent, View view, 
           int position, long id) { 
      Toast.makeText(view.getContext(), "You Clicked at " +web[+ position], Toast.LENGTH_SHORT).show(); 
      //setContentView(R.layout.list_item_main); 


      mListView = (ListView) view.findViewById(R.id.item_list_view); 
      Item.getRecipesFromDB(OneFragment.this, DBReference); 
     } 
    }); 

    return view; 
} 

@Override 
public void newDataReceived(ArrayList<Item> itemList) { 
    ItemAdapter adapter = new ItemAdapter(mListView.getContext(), itemList); 
    mListView.setAdapter(adapter); 
} 

Antwort

0

Öffnen Sie ein neues Fragment, wenn eine gridView angeklickt wird und übergeben Sie dann die Position aus den Bundle-Parametern. Dann in NewFragment zeigen Sie die Listview und die Daten aus der Datenbank.

gridview.setOnItemClickListener(new AdapterView.OnItemClickListener() { 

     @Override 
     public void onItemClick(AdapterView<?> parent, View view, 
           int position, long id) { 

      NextFragment nextFrag= new NextFragment(); 
      Bundle bundle = new Bundle(); 
      bundle.putInt("POSITION",position); 
      this.getFragmentManager().beginTransaction() 
        .replace(R.id.Layout_container, nextFrag,TAG_FRAGMENT) 
        .addToBackStack(null) 
        .commit(); 
     } 
    }); 

In der NextFragment erhalten Sie die Referenz von ListView und aktualisieren Sie dann die Daten aus der Datenbank mit dem richtigen Adapter.

+0

Ich habe versucht, wie vorgeschlagen, aber führt zu einem Fehler: java.lang.UnsupportedOperationException: addView (View) wird nicht unterstützt in AdapterView 'ListItemMainFragment nextFrag = new ListItemMainFragment(); Bündelbündel = neues Bündel(); bundle.putInt ("POSITION", Position); . OneFragment.this.getFragmentManager() begintransaction() .replace (R.id.grid, nextFrag) .addToBackStack (null) .commit(); '' – dacscan3669

+0

@Override Öffentlichkeit onCreateView (LayoutInflater inflater, Viewgroup container, Bundle savedInstanceState) { Ansicht anzeigen = inflater.inflate (R.layout.list_item_main, container, false); mlistView = (ListView) view.findViewById (R.id.item_list_view); final String DBReference = "all/0/Doctors"; Item.getRecipesFromDB (ListItemMainFragment.this, DBReference); Rückansicht; } ' – dacscan3669

+0

' OneFragment.this.getFragmentManager(). BeginTransaction() .replace (R.id.grid, nextFrag) .addToBackStack (null) .commit(); 'Ändern Sie die ID vom Gitter zum Container des Fragments. "R.id.grid" -> R.id.container –