2011-02-06 4 views
7

Hello, World Gridview 튜토리얼 예제를 사용하여 배열의 이미지 위치를 표시하는 대신 이미지를 전체 화면으로 만들려고합니다. 내가 안드로이드와 친숙하지 못해서 이것이 내 첫 번째 개발 시도 인 것처럼, 나는 손실에 빠졌습니다. 그래도 난 자바 잘 알고, 나는 (즉 분명히 작동하지 않습니다)이 같은 일을 시도했습니다android tutorial app에서 전체 이미지 만들기

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);  
} 

그러나 응용 프로그램 충돌 (강제 닫기). 어떤 아이디어?

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

는 그 수 있습니다 : 여기

Here is the tutorial app I am using

+0

정확한 오류는 무엇입니까? LogCat은 뭐라고 말합니까? – John

+0

그것은 imgView.setImageResource에 널 포인터를 던지고 있습니다. logcat에 대한 팁을 주셔서 감사합니다, 나는 단지 일반 디버거를 사용하고있었습니다. 적어도 지금은 자세한 오류를 볼 수 :) view.getId() -1 btw입니다. – Organiccat

답변

23
imgView.setImageResource(position); 

이 당신에게 오류를 제공합니다. 매개 변수는 이미지의 리소스 ID (int)를 가리켜 야합니다. R.id.imageid. 올바른 리소스 ID를 제공하더라도 작업을 수행하지 않으려 고합니다.

올바른 리소스 ID를 얻으려면보기의 어댑터를 호출하고 getItemId(position) 메서드를 사용하여 올바른 리소스 ID를 얻어야합니다. getItemId() 메소드를 0보다으로 변경하면 ImageAdapter에서 (Google의 예와 같이)

그러나 결과를 얻으려면 새로운 활동을 만들고 그런 이미지를로드하는 것이 좋습니다.

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); 
    } 
}); 

당신이 "fullImage"의 ID와 단지 이미지 뷰를 포함하는 full_image.xml 레이아웃 파일을 만들 가정, 당신의 FullScreenImage 클래스는 다음과 같아야합니다 :이 함께

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); 
    } 
} 

뭔가를 예를 들어

선은 당신을 위해 잘 작동 할 것이고, 약간 조정할 것입니다. AndroidManifest.xml 파일의 FullScreenImage를 <activity>으로 추가해야합니다.

+0

몇 가지 편집 작업이 필요했지만 일단 작업을 시작하면 그 요지가 있습니다. 아마 안드로이드로 좀더 쉽게 넘어 가기 시작 했어야합니다 : p – Organiccat

+0

이 코드는 클래스 캐스트 예외를줍니다. – ekjyot

+0

long imageId = (ImageAdapter) parent.getAdapter.getItemAt (position); -이 줄은 나를 보여줍니다. 유형 불일치 : MainActivity.ImageAdapter에서 long으로 변환 할 수 없습니다. –

0

, 당신이 있었다 뷰의 ID를 복용하고 자체를 다시 찾기 위해합니다 (view 인수 전달)하고 사용을 클릭 아무런 의미가 없습니다. 특히 클릭 한 시각이 인 경우 ID가 없으므로 findViewByIdnull으로 반환됩니다.

당신은 아마 대신 ImageView의 ID를 전달하려는 : 올바르게 사용하지 않기 때문에

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

v는 내 ImageView이지만, 디버거에서 두 번 확인해도 괜찮습니다.하지만 mID가 없습니다. (이는 id 인 것처럼 보이기 때문에 parent.getId()를 시도하면 표시됩니다. ImageView는 코드 내부에서 생성 된 동적 객체이며, GridView의 데이터 구성 요소로 도움을 받으면 도움이됩니다. – Organiccat

+0

이제 점점 가까워지고 있습니다. 이제 이미지가 비어지고 오류가 발생하지 않습니다. – Organiccat

+0

imageView가 gridview 내부에서 gridview를 대체해야합니까? – Organiccat