2011-02-06 18 views
7

Korzystając z przykładowego samouczka Hello, World Gridview, próbuję zrobić obraz w trybie pełnego ekranu, zamiast wyświetlać położenie obrazu w tablicy. Ponieważ nie jestem obeznany z Androidem i jest to moja pierwsza próba rozwojowa, nie jestem w stanie tego zrobić. Jestem zaznajomieni z Java chociaż, a próbowałem robić takie rzeczy (które nie działają oczywiście):Tworzenie obrazu na pełnym ekranie na samouczku na Androidzie

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    GridView gridview = (GridView) findViewById(R.id.gridview); 
    gridview.setAdapter(new ImageAdapter(this)); 

    gridview.setOnItemClickListener(new OnItemClickListener() { 
     public void onItemClick(AdapterView<?> parent, View v, int position, long id) { 
      showImage(v, position); 
      Toast.makeText(HelloAndroid.this, "" + parent.getId(), Toast.LENGTH_SHORT).show(); 
     } 
    }); 
} 

private void showImage(View view, int position) { 
    ImageView imgView = (ImageView) view; 
    imgView.setImageResource(position);  
} 

Ale awarii aplikacji (siła zamknij). Jakieś pomysły?

Here is the tutorial app I am using

+0

Jaki jest dokładny błąd? Co mówi LogCat? – John

+0

Rzuca zerowy wskaźnik na imgView.setImageResource. Dzięki za podpowiedź na temat logcat, używałem zwykłego debuggera. Przynajmniej teraz widzę pełne błędy :) view.getId() to -1 btw. – Organiccat

Odpowiedz

23
imgView.setImageResource(position); 

Daje to błąd, ponieważ nie jest on używany prawidłowo. Parametr powinien wskazywać identyfikator zasobu obrazu (który jest int), np. R.id.imageid. Nawet jeśli dostarczysz prawidłowy identyfikator zasobu, to, co chcesz zrobić, nie będzie działało.

Aby uzyskać prawidłowy identyfikator zasobu, należy wywołać adapter widoku i użyć metody getItemId(position), aby uzyskać prawidłowy identyfikator zasobu. w ImageAdapter, jeśli zmienisz metodę getItemId(), aby zwrócić mThumbsIds[position] zamiast 0 (jak w przykładzie Google'a).

Jednak, aby osiągnąć Twój wynik, proponuję utworzyć nową aktywność i po prostu wczytać obraz w ten sposób.

Na przykład:

gridview.setOnItemClickListener(new OnItemClickListener() { 
    public void onItemClick(AdapterView<?> parent, View v, int position, long id) { 
     long imageId = (ImageAdapter)parent.getAdapter.getItemAt(position); 

     Intent fullScreenIntent = new Intent(v.getContext(), FullScreenImage.class); 
     fullScreenIntent.putExtra(thisClassName.class.getName(), imageId); 

     thisClassName.this.startActivity(fullScreenIntent); 
    } 
}); 

Zakładając utworzyć plik full_image.xml układ, zawierający tylko ImageView o identyfikatorze "fullImage", klasa FullScreenImage powinna wyglądać następująco:

public class FullScreenImage extends Activity 
{ 
    protected void onCreate(Bundle savedInstanceState) { 
     setContentView(R.layout.full_image); 
     Intent intent = getIntent(); 
     long imageId = intent.getExtras().get(thisClassName.class.getName()); 
     ImageView imageView = (ImageView) v.findViewById(R.id.fullImage); 

     imageView.setLayoutParams(new ViewGroup.LayoutParams(WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.MATCH_PARENT)); 

     imageView.setImageResource(imageId); 
     imageView.setScaleType(ImageView.ScaleType.FIT_XY); 
    } 
} 

coś w tym linie powinny działać dobrze dla ciebie, z pewnymi zmianami. Upewnij się, że dodajesz również FullScreenImage do pliku AndroidManifest.xml jako <activity>.

+0

Potrzebowałem edycji, ale zrozumiałem, kiedy zacząłem. Prawdopodobnie powinienem był zacząć od czegoś łatwiejszego wskakiwania do Androida: p – Organiccat

+0

ten kod podaje wyjątek odlewu klasowego – ekjyot

+0

long imageId = (ImageAdapter) parent.getAdapter.getItemAt (position); - ten wiersz pokazuje mi niezgodność typu: nie można przekonwertować z MainActivity.ImageAdapter na long –

0

Tutaj bierzesz identyfikator widoku, który był kliknięciu (przekazywane w view argumentu) i używając go szukać aż się znowu:

ImageView imgView = (ImageView) findViewById(view.getId()); 

To sprawia, nie ma sensu, zwłaszcza, że ​​kliknięty widok najwyraźniej nie ma ID, powodując, że findViewById powraca null.

Prawdopodobnie chcesz przekazać identyfikator Twojego ImageView Zamiast:

ImageView imgView = (ImageView) findViewById(R.id.whatever_the_id_of_the_image_view_is); 
+0

v to jednak mój ImageView, dwukrotnie sprawdziłem w debuggerze i jest tam wyświetlany ok, ale nie ma identyfikatora mID (który wydaje się być identyfikatorem, ponieważ to pokazuje, gdy próbuję parent.getId(). ImageView to dynamiczny obiekt wygenerowany wewnątrz kodu i jest to makijaż danych GridView, jeśli to pomoże. – Organiccat

+0

Podchodzę bliżej, teraz obraz staje się pusty i nie dostaję błędu – Organiccat

+0

Ponieważ imageView jest w widoku siatki, czy muszę zastąpić gridview? – Organiccat

Powiązane problemy