2012-06-05 3 views
0

나는이 코드를 클릭 했으므로 클릭 한 후에 이미지 뷰를 삭제하고 싶습니다. 상대 레이아웃을 사용합니다. 나는 무엇을해야만 하는가? 많은 이미지 뷰가 있기 때문에 숨기지 말고 삭제해야하므로 프로그램을 빨리 처리 할 수 ​​있습니다. 당신이 특정 뷰에 대한 참조가있는 경우타이머의 이미지 뷰 삭제

banyakmusuh= new CountDownTimer(50000,1500) { 

    @Override 
    public void onTick(long millisUntilFinished) { 
     // TODO Auto-generated method stub 

     Random a = new Random(); 
     int posisix = a.nextInt(500); 
     btn = new ImageView(level2.this); 
     btn.setImageResource(R.drawable.salju); 
     i= i+1; 
     btn.setId(i);        
     RelativeLayout.LayoutParams params = new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT); 
     params.setMargins(posisix, 0, 0, 0); 
     btn.setLayoutParams(params); 
     RelativeLayout linearLayout = (RelativeLayout) findViewById(R.id.tingkat2);     
     linearLayout.addView(btn); 
     btn.setOnClickListener(new View.OnClickListener() { 
     @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
        data.nilai+=10; 
        TextView score1 = (TextView) findViewById(R.id.skore); 
        score1.setText(String.valueOf(data.nilai)); 
       //what the code for delete imageview? 
       //some people say to write this code but it cant, there are a green line when i debug it 
       //((RelativeLayout)v.getParent()).removeView(v); 
           } 
          }); 

         } 

         @Override 
         public void onFinish() { 
          // TODO Auto-generated method stub 
          //banyakmusuh.start(); 
         } 
        }.start(); 

답변

1

안드로이드가 자바에서 작동합니다. java에서는 오브젝트를 삭제하거나 삭제할 수 없습니다. 당신은 단지 자바 머신에 기계가 필요하다면 객체를 파괴 할 수 있다고 말할 수있다.

네, 제 생각 엔, 당신은 removeView(btn)부터 시작해야한다고 생각합니다. 그러나 btn=null을 설정하는 것도 잊지 마십시오. 따라서 메모리가 해제 될 수 있음을 Java 시스템에 알리는 것입니다.

+0

뷰를 제거하면 어떨까요? 나는 문제가있다 나는 심상보기를 ... 클릭해야하는 간단한 게임이있다. 이렇게 많은 mageview 및 나는 그것을 삭제하지 않는다면 프로그램은 이렇게 느리게 달릴 것이다. .. 선생님을 slove하는 방법? –

+0

답변을 수정했습니다. 나는 기꺼이 도와주고 기분이 자유롭고 나는 "선생님"이 아닙니다. 친구 :-). 느리게 실행되는 프로그램의 경우 Android 개발자 페이지 http://android-developers.blogspot.cz/search/label/Optimization의 최적화 페이지도 확인하십시오. – Gangnus

1

, 당신은 사용할 수 있습니다

yourRelativeLayout.removeView(imageViewToRemove); 

내가 할 것 :

// I would consider renaming your layout, btw 
final RelativeLayout linearLayout = (RelativeLayout) findViewById(R.id.tingkat2); 
btn.setOnClickListener(new OnClickListener() 
      { 
       @Override 
       public void onClick(View v) 
       { 
        linearLayout.removeView(btn); 
       } 
      }); 
+0

감사합니다. 내 레이아웃의 이름을 바꿉니다. 이미지 뷰를 클릭하면 .. 클래스 파일 편집기가 표시됩니다. :( –

+0

글쎄, 기술적으로보기에서 제거해야합니다.하지만 해결 방법으로 추측합니다. 시도해 볼 수 있습니다 : setBackgroundDrawable (null); ImageView는 뷰에 참조가 있기 때문에 여전히 메모리에 남아 있지만 적어도 이미지 데이터는 더 이상 존재하지 않습니다. 그러나 removeView가 작동해야하며 더 나쁜 문제는 그게 당신을 위해 해결하지 않았다면 – Guardanis

+0

하지만 imageview 남아 theres 새로운 문제 .. 왜냐하면 나는 antoher imageview ..와 collision 이미지 뷰 설정을 원한다면 여전히 그것은 반복 루핑의 원인이 남아 .. = ( –