2012-09-09 2 views
0

안드로이드/자바에 있지만 C/C++에서 잘 설립 된 초보자 & 오브젝트 파스칼. 단 하나만 활성화되어있는 5 개의 ImageButton이 있습니다. 그런 다음 외로운 사용 가능 버튼이 눌려지는 시점에서 다른 4 개는 부울 값 (enableBtn2..3 .. 등)과 함께 전달 된 setEnabled()를 호출하여 활성화해야합니다. 하지만 외톨드 인 에이블 된 버튼을 눌러 newRung() 멤버를 호출하면 다른 멤버 인 refreshMnuButtons()가 호출 될 때마다 setEnabled() 부모 클래스 member.Can 누군가가 호출하여 발생했다고 의심되는 예외가 발생합니다. 허점을 지적하시오. 나는 미친 듯이 설명을 찾았지 만 적절한 대답을 찾을 수없는 것 같습니다. 친절하게 내 코드가 첨부 참조 :ImageButton.setEnabled() throws Exception

public class MyActivity extends Activity { 
    private ImageView cell1,cell2,cell3,cell4,cell5,cell6,rungClose; 
    private ImageButton mnuBtn1,mnuBtn2,mnuBtn3,mnuBtn4,mnuBtn5; 
    private boolean enableBtn1 = true, 
      enableBtn2 = false, 
      enableBtn3 = false, 
      enableBtn4 = false, 
      enableBtn5 = false; 

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

     // setup toolbar 
     TableLayout tbl = (TableLayout)findViewById(R.id.tblToolbar); 
     ImageButton mnuBtn1 = new ImageButton(this); 

     mnuBtn1.setImageResource(R.drawable.rungopentool); 
     mnuBtn1.setEnabled(enableBtn1); 
     //setup mnuBtn1 listener 

     mnuBtn1.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       newRung(); 
      } 
     }); 
     ImageButton mnuBtn2 = new ImageButton(this); 

     mnuBtn2.setImageResource(R.drawable.noc); 
     mnuBtn2.setEnabled(enableBtn2); 
     //setup mnuBtn2 listener 

     mnuBtn2.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       addNOC(); 
      } 
     }); 
     final ImageButton mnuBtn3 = new ImageButton(this); 

     mnuBtn3.setImageResource(R.drawable.ncc); 
     mnuBtn3.setEnabled(enableBtn3); 
     //setup mnuBtn3 listener 

     mnuBtn3.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       addNCC(); 
      } 
     }); 
     ImageButton mnuBtn4 = new ImageButton(this); 

     mnuBtn4.setImageResource(R.drawable.process); 
     mnuBtn4.setEnabled(enableBtn4); 
     //setup mnuBtn4 listener 

     mnuBtn4.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       addProcess(); 
      } 
     }); 
     ImageButton mnuBtn5 = new ImageButton(this); 

     mnuBtn5.setImageResource(R.drawable.coil); 
     mnuBtn5.setEnabled(enableBtn5); 
     //setup mnuBtn5 listener 

     mnuBtn5.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       addCoil(); 
      } 
     }); 

     TableRow mnurow = new TableRow(this); 
     mnurow.setBackgroundColor(0x3F000000); 

     // display menu 
     mnurow.addView(mnuBtn1); 
     mnurow.addView(mnuBtn2); 
     mnurow.addView(mnuBtn3); 
     mnurow.addView(mnuBtn4); 
     mnurow.addView(mnuBtn5); 

     tbl.addView(mnurow); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.menu.activity_pic_ladder_main, menu); 
     return true; 
    } 

    private void createRungImages() { 
     // TODO 
    } 

    private void newRung() 
    { 
     Toast.makeText(this, "New Rung" ,Toast.LENGTH_SHORT).show(); 
     enableBtn2 = true; 
     enableBtn3 = true; 
     enableBtn4 = true; 
     enableBtn5 = true; 
     enableBtn1 = false; 
     refreshMnuButtons(); 
    } 
    private void addNOC() 
    { 
     Toast.makeText(this, "NOC" ,Toast.LENGTH_SHORT).show(); 
    } 
    private void addNCC() 
    { 
     Toast.makeText(this, "NCC" ,Toast.LENGTH_SHORT).show(); 
    } 
    private void addProcess() 
    { 
     Toast.makeText(this, "Add Process" ,Toast.LENGTH_SHORT).show(); 
    } 
    private void addCoil() 
    { 
     Toast.makeText(this, "Coil" ,Toast.LENGTH_SHORT).show(); 
    } 

    public void refreshMnuButtons() 
    { 
     try { 
      mnuBtn1.setEnabled(enableBtn1); 
      mnuBtn2.setEnabled(enableBtn2); 
      mnuBtn3.setEnabled(enableBtn3); 
      mnuBtn4.setEnabled(enableBtn4); 
      mnuBtn5.setEnabled(enableBtn5); 
     } 
     catch(Exception e) {Toast.makeText(this, "Exception" ,Toast.LENGTH_SHORT).show(); } 
    } 
} 

여기 내 XML이다 : 나는 코드에 의해 그래픽 요소의 대부분을 생성하기 위해 노력하고 있습니다.

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" > 

    <RelativeLayout 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="false" 
     android:layout_alignParentTop="true" 
     android:layout_centerHorizontal="true" 
     android:layout_marginBottom="44dp" > 

     <ScrollView 
      android:id="@+id/scrollView1" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" > 

      <TableLayout 
       android:id="@+id/ladderSheet" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" > 

      </TableLayout> 

     </ScrollView> 

    </RelativeLayout> 

    <RelativeLayout 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true" > 

     <HorizontalScrollView 
      android:id="@+id/horizontalScrollView1" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" > 

      <TableLayout 
       android:id="@+id/tblToolbar" 
       android:layout_width="fill_parent" 
       android:layout_height="wrap_content" 
       android:scrollbarStyle="outsideInset" 
       android:scrollbars="horizontal" > 
      </TableLayout> 

     </HorizontalScrollView> 

    </RelativeLayout> 

</RelativeLayout> 

미리 감사드립니다.

+0

당신의 로그 캣 오류를 게시하시기 바랍니다. – Sam

+0

나는 어딘가에 널 포인터 예외를 추측하고있다. 하지만 @ 샘이 말했듯이, logcat 오류 – gaara87

답변

3

두 개의 mnuBtnX 변수를 만듭니다 (로컬 변수와 클래스 변수 중 하나). 이 같은 버튼을 선언 할 때 :

private ImageButton mnuBtn1,mnuBtn2,mnuBtn3,mnuBtn4,mnuBtn5; 

을이 분명 클래스 변수,하지만 onCreate()에 사용 :

ImageButton mnuBtn1 = new ImageButton(this); 

는 절망적 (우리를 위해 C/C++ 민속)이 '아무튼 클래스 변수와 같은 이름의 지역 변수를 생성했다는 경고 또는 오류를 던지지 마십시오. 이 로컬 mnuBtn1은 클래스 'mnuBt1과 관련이 없습니다. 따라서 에서 'mnuBtn1'클래스가 여전히 null이므로 NullPointerException이 발생합니다.

간단히

onCreate()에서이 작업을 수행 :

mnuBtn1 = new ImageButton(this); 
+0

좋은 캐치를 게시하시기 바랍니다 :) 나는 그 오류가 의심되는데, 나는 그저 뭔가 다른 것을 넣은 logcat을 기다리고 있었다. :) – gaara87

+0

매우 prompt.Thanks 샘! 황소 눈, 그 대답은 .. 아직도 내 C/C + + 세계에 살면서 그 기능의 대부분은 자바 디자이너에 의해 정크했다 잊고 :-). 고마워, Akash .. –

관련 문제