2014-07-13 3 views
0

나는 android 배우기 시작하고 질문이 있습니다. 내가 XML에서 필드를 받으면 내가 수행findViewById 중복 없음

import android.widget.RatingBar; 

public class TestActivity extends Activity { 

    protected void onCreate(Bundle savedInstanceState) { 
     RatingBar rate = (RatingBar) findViewById(R.id.ratebar1); 
     rate.setOnRatingBarChangeListener(new RatingBar.OnRatingBarChangeListener() { 

      public void onRatingChanged(RatingBar ratingBar, float rating, 
        boolean fromTouch) { 
       ((TextView)findViewById(R.id.rating_text)).setText("Rating: "+ (int)rating); 
      } 
     }); 

     final Button test = (Button) findViewById(R.id.Button123); 
     test.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       RatingBar rate = (RatingBar) findViewById(R.id.ratebar1); 
       rate.setRating(2); 
      } 
     } 
     ); 
     }); 
} 

확인 작업을하지만, 왜 내가 할 수없는이 :

import android.widget.RatingBar; 

public class TestActivity extends Activity { 

    RatingBar rate = (RatingBar) findViewById(R.id.ratebar1); //here!!! 

    protected void onCreate(Bundle savedInstanceState) { 
     //remove!! 
     rate.setOnRatingBarChangeListener(new RatingBar.OnRatingBarChangeListener() { 

      public void onRatingChanged(RatingBar ratingBar, float rating, 
        boolean fromTouch) { 
       ((TextView)findViewById(R.id.rating_text)).setText("Rating: "+ (int)rating); 
      } 
     }); 

     final Button test = (Button) findViewById(R.id.Button123); 
     test.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       //remove!! 
       rate.setRating(2); 
      } 
     } 
     ); 
     }); 
} 

하거나이 초기화 예를 들어 기능? 어떻게 만들 수 있습니까?

+0

에서 OnCreate 당신이 같이 findViewById (컨텍스트 기능)을 사용할 수 있도록 처리하는 적절한 컨텍스트를 제공과 같은 코드를 사용합니다. onCreate를 시작하기 전에 리소스에 대한 컨텍스트 링크가 없습니다. – zgc7009

+0

@siger 정답을 선택하십시오. – Simas

+0

또한 onCreate 함수에 @Override를 추가하고 onRatingChanged 함수에서 사용할 수 없으므로 rating_text를 클래스 멤버로 사용합니다 (아래 답변 참조). –

답변

0

당신은 아마 RatingBar 최종되고 싶어하지만,이 같은에서 onCreate 방법 내부 : 때문에 활동 context

protected void onCreate(Bundle savedInstanceState) { 
    setContentView(R.layout.activity_test); // also this as noted by other answers 
    final RatingBar rate = (RatingBar) findViewById(R.id.ratebar1); //here!!! 
    rate.setOnRatingBarChangeListener(new RatingBar.OnRatingBarChangeListener() { 

     public void onRatingChanged(RatingBar ratingBar, float rating, 
       boolean fromTouch) { 
      ((TextView)findViewById(R.id.rating_text)).setText("Rating: "+ (int)rating); 
     } 
    }); 

    final Button test = (Button) findViewById(R.id.Button123); 
    test.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 

      rate.setRating(2); 
     } 
    } 
    ); 
    }); 
} 
+0

이 작업, 감사합니다! – siger

1

그것의 활동 클래스, activty의 onCreate 방법 후 사용 가능한에서 사용할 수 없습니다.

RatingBar rate을 클래스에 정의하고 onCreate() 메서드에서 시작할 수 있습니다. findViewById 메서드를 사용하기 전에 onCreate() 메서드에 setContentView(R.layout.activity_test); 메서드를 추가하십시오.

또한 onRatingChanged 기능에서 사용할 수 없으므로 클래스 구성원으로 rating_text을 사용하십시오. 그래서

import android.widget.RatingBar; 

public class TestActivity extends Activity { 
    private RatingBar rate; 
    private TextView rating_text; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     setContentView(R.layout.activity_test); 
     rate = (RatingBar) findViewById(R.id.ratebar1); 
     rating_text = (TextView)findViewById(R.id.rating_text); 
     rate.setOnRatingBarChangeListener(new RatingBar.OnRatingBarChangeListener() { 

      public void onRatingChanged(RatingBar ratingBar, float rating, 
        boolean fromTouch) { 
       rating_text.setText("Rating: "+ (int)rating); 
      } 
     }); 

     final Button test = (Button) findViewById(R.id.Button123); 
     test.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       rate.setRating(2); 
      } 
     } 
     ); 
     }); 
    } 
0
import android.widget.RatingBar; 

public class TestActivity extends Activity { 

private RatingBar rate; 

protected void onCreate(Bundle savedInstanceState) { 
    //Where is your setcontentview ??? 
    rate = (RatingBar) findViewById(R.id.ratebar1); 
    rate.setOnRatingBarChangeListener(new RatingBar.OnRatingBarChangeListener() { 

     public void onRatingChanged(RatingBar ratingBar, float rating, 
       boolean fromTouch) { 
      ((TextView)findViewById(R.id.rating_text)).setText("Rating: "+ (int)rating); 
     } 
    }); 

    final Button test = (Button) findViewById(R.id.Button123); 
    test.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      //remove!! 
      rate.setRating(2); 
     } 
    } 
    ); 
    }); 

}

+1

"= ="작업 방법은 무엇입니까? – siger

+0

복사하여 붙여 넣기 실수, 고정 – Alex