2011-01-03 7 views
0

나는 버튼 배열을 포함하는 GridView와 간단한 테스트 응용 프로그램을 가지고, 나는 이러한 버튼 중 하나를 만지 작업 (모든 작업)을 수행하려고 해요.안드로이드 Null 포인터 예외 onClickListener 라인에

<?xml version="1.0" encoding="utf-8"?> 

<GridView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/gridview" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:numColumns="auto_fit" 
    android:verticalSpacing="10dp" 
    android:horizontalSpacing="10dp" 
    android:columnWidth="90dp" 
    android:stretchMode="columnWidth" 
    android:gravity="center" 
/> 

그리고 oggetto.xml은 다음 줄이 포함 :

package com.example.convert; 

import android.app.Activity; 
import android.os.Bundle; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.ArrayAdapter; 
import android.widget.Button; 
import android.widget.GridView; 

public class convert extends Activity { 
    //private ListView List; 

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

     String [] elenco = { 
       "ciao","questo","è","un esempio","Configurazione" 
       }; 

     ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this,R.layout.oggetto,R.id.testogg,elenco); 
     GridView gridview = (GridView) findViewById(R.id.gridview); 
     gridview.setAdapter(arrayAdapter); 
     Button btn = (Button) (findViewById(R.id.testogg)); 


     btn.setOnClickListener(new OnClickListener(){ 
       @Override 
       public void onClick(View v) { 
        setContentView(R.layout.oggetto); 
       } 

      }); 

    } 

} 

main.xml은 다음과 같다 :

주요 코드는 이것이다

<?xml version="1.0" encoding="utf-8"?> 

<Button 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:text="@+id/TextView01" 
    android:layout_width="80dp" 
    android:layout_height="80dp" 
    android:id="@+id/testogg"> 
</Button> 

하지만을 나는 실행하려고하면 신청서는 012에 NullPointerException을 돌려줍니다.행.

버튼이 동일한 ID를 가지고 있기 때문에 그렇게 될 수 있습니까? 이 경우 다른 ID를 가진 반복 된 단추를 얻으려면 어떻게해야합니까?

도움 주셔서 감사합니다.

답변

1

는 될 수있는 동일한 ID

이 버튼의 원인이 일어날 수 있음. 그러나 그것은 심지어 사실이라면 무엇인가 잘못되었다는 것을 보여줍니다. XML에 지정된 각 버튼은 한 번만 생성됩니다. findViewById()를 여러 번 호출하거나 리소스 ID를 전달하여 여러 버튼을 만들 수 없습니다.

하지만 만 main.xml에 포함 뷰의 null 이외의 뷰를 돌려줍니다 setContentView(R.layout.main);

findViewById()를 호출하기 때문에 문제가 온다. 팽창하지 않기 때문에 컨텍스트는 다른 XML 레이아웃에 대해 아무 것도 모릅니다.

간단한 프로그램으로 시작하고 가이드를 통해 안드로이드 뷰의 작동 방식을 확인하십시오.

+0

대단한 답변 !!! 이것은 나에게 내가 찾던 힌트를 줬다! 감사! 하지만 그렇다면 ... 내가 다른 XML에서로드 된보기를 어떻게 참조합니까? –

+0

할 수 없습니다. 뷰는 팽창 될 때까지 존재하지 않습니다. 이는 컨텐츠 뷰를 main.xml로 설정할 때 발생합니다. XML 문서는 안드로이드에게 뷰를 생성하는 방법을 알려주는 청사진이다. 레이아웃 인플레이터는 실제 건물을 조작합니다. – kcoppock

+0

다른 방법은 코드에서 새 Button을 만드는 것입니다. 이미 부풀려진 뷰에 그 버튼을 추가하는 것은 사소한 일이 아닙니다 (가능하다면 확실하지 않습니다). 동적 레이아웃이 필요한 경우 코드에서보기를 만들어야합니다. – Falmarri

1

수행하려는 작업은 무엇입니까? 원래 GridView 만 포함하는 레이아웃을 설정 한 다음에도 존재하지 않는 Button을 찾으려고합니다 (오류 발생 행에서 컨텐츠보기가 main.xml 문서이며 버튼이 포함되어 있지 않음). , testogg의 이드를 제외하고). 즉, 버튼이 없으므로 btn은 null입니다. 그것이 NullPointerException의 원인입니다.

GridView의 항목에 대한 클릭 이벤트를 가로 채려면 OnItemClickListener을 사용하고 GridView에 연결해야합니다. onItemClick 메소드 정의에 대한 링크를 참조하십시오.

관련 문제