2014-12-30 3 views
-2

나는 가지고있는 조각 클래스에 등급 막대를 구현하려고합니다. 하지만 난 항상 null 포인트 예외가 발생하고 내 응용 프로그램이 다운됩니다. 내가 읽은 튜토리얼은 Activity 클래스에 등급 표시 줄을 구현하는 방법을 보여줍니다. 어떻게 이것을 조각 클래스에서 구현할 수 있습니까?조각 클래스에서 등급 막대를 구현할 때의 문제

내 클래스

package com.f%%%%%%%%; 

import java.util.ArrayList; 
................... 

public class TheaterDetailFragment extends Fragment { 

    private ViewPager viewtheater; 
    private ViewPageAdapter adaptertheater; 
    private Activity activity; 
    private CommonVariable commonVariable; 
    private ProgressDialog dialog; 
    private ArrayList<BaseElement> TheaterDetail; 
    private ArrayList<BaseElement> theateritems; 
    private int id; 
    private String pos; 
    private RatingBar ratingBar; 
    private TextView txtRatingValue; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 

     View view = inflater.inflate(R.layout.theaterdetail_fragment, 
       container, false); 

     addListenerOnRatingBar(); 

     activity = this.getActivity(); 

     pos= getArguments().getString(BundleKey.THEATERPOSITION.getKey()); 

     commonVariable = (CommonVariable) activity.getApplication(); 

     viewtheater = (ViewPager) view.findViewById(R.id.theaterdetail); 

     dialog = new ProgressDialog(TheaterDetailFragment.this.getActivity()); 
     dialog.setMessage("Loading Theater Details"); 
     dialog.setCancelable(true); 

     new BackGround().execute(); 

     return view; 
    } 

    public void addListenerOnRatingBar() { 

      ratingBar = (RatingBar) getView().findViewById(R.id.ratingBar1); 
      txtRatingValue = (TextView) getView().findViewById(R.id.txtRatingValue); 

      //if rating value is changed, 
      //display the current rating value in the result (textview) automatically 
      ratingBar.setOnRatingBarChangeListener(new OnRatingBarChangeListener() { 
       public void onRatingChanged(RatingBar ratingBar, float rating, 
        boolean fromUser) { 

        txtRatingValue.setText(String.valueOf(rating)); 

       } 
      }); 
      } 

    public class BackGround extends AsyncTask<Void, Void, Void> { 

     @Override 
     protected Void doInBackground(Void... params) { 

      //Theater theaterdetail = (Theater) commonVariable.getTheater().get(id); 

      TheaterDetail = JSONServices.getTheaterDetails(pos); 

      return null; 
     } 

     @Override 
     // check again 
     protected void onPostExecute(Void result) { 


      commonVariable.setTheaterDetail(TheaterDetail); 

      adaptertheater = new ViewPageAdapter(commonVariable.getTheaterDetail(), 
        Element.THEATER_DETAIL.getType(), activity); 

      viewtheater.setAdapter(adaptertheater); 


      dialog.dismiss(); 



      super.onPostExecute(result); 

     } 

     @Override 
     protected void onPreExecute() { 
      // TODO Auto-generated method stub 

      dialog.show(); 
      super.onPreExecute(); 

     } 

    } 

} 

내 레이아웃은

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    android:id="@+id/filmhall" 
    android:background="@color/grey" > 

    <!-- 
     <fragment 
    android:id="@+id/map" 
    android:name="com.google.android.gms.maps.SupportMapFragment" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" /> 
    --> 


    <TextView 
     android:id="@+id/id" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textColor="#000000" 
     android:layout_marginTop="4dp" 
     android:textStyle="bold" 
     android:textSize="15dp" /> 


    <RatingBar 
     android:id="@+id/ratingBar1" 
     style="?android:attr/ratingBarStyleSmall" 
     android:isIndicator="false" 
     android:layout_marginTop="10dp" 
     android:layout_marginLeft="4dp" 
     android:numStars="10" 
     android:rating="2.0" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     /> 

    <TextView 

      android:id="@+id/txtRatingValue" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_marginLeft="4dp" 
      android:text="Rating :" 
      android:textAppearance="?android:attr/textAppearanceSmall" /> 

    </LinearLayout> 

* 추가 ​​필드가 삭제되었습니다!

튜토리얼 내가 findViewById를 처음에 에러가 있었다

http://www.mkyong.com/android/android-rating-bar-example/

1. 기기를 대해 참조 난의 getView을 사용하여 고정(). 사전에

감사합니다!

업데이트!

로그 캣

12-30 12:01:23.456: E/AndroidRuntime(13134): FATAL EXCEPTION: main 
12-30 12:01:23.456: E/AndroidRuntime(13134): java.lang.NullPointerException 
12-30 12:01:23.456: E/AndroidRuntime(13134): at com.fortuna.cinemalk.TheaterDetailFragment.addListenerOnRatingBar(TheaterDetailFragment.java:119) 
12-30 12:01:23.456: E/AndroidRuntime(13134): at com.fortuna.cinemalk.TheaterDetailFragment.onCreateView(TheaterDetailFragment.java:98) 
12-30 12:01:23.456: E/AndroidRuntime(13134): at android.support.v4.app.Fragment.performCreateView(Fragment.java:1460) 
12-30 12:01:23.456: E/AndroidRuntime(13134): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:911) 
12-30 12:01:23.456: E/AndroidRuntime(13134): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1088) 
12-30 12:01:23.456: E/AndroidRuntime(13134): at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682) 
12-30 12:01:23.456: E/AndroidRuntime(13134): at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1444) 
12-30 12:01:23.456: E/AndroidRuntime(13134): at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:429) 
12-30 12:01:23.456: E/AndroidRuntime(13134): at android.os.Handler.handleCallback(Handler.java:587) 
12-30 12:01:23.456: E/AndroidRuntime(13134): at android.os.Handler.dispatchMessage(Handler.java:92) 
12-30 12:01:23.456: E/AndroidRuntime(13134): at android.os.Looper.loop(Looper.java:123) 
12-30 12:01:23.456: E/AndroidRuntime(13134): at android.app.ActivityThread.main(ActivityThread.java:4627) 
12-30 12:01:23.456: E/AndroidRuntime(13134): at java.lang.reflect.Method.invokeNative(Native Method) 
12-30 12:01:23.456: E/AndroidRuntime(13134): at java.lang.reflect.Method.invoke(Method.java:521) 
12-30 12:01:23.456: E/AndroidRuntime(13134): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858) 
12-30 12:01:23.456: E/AndroidRuntime(13134): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
12-30 12:01:23.456: E/AndroidRuntime(13134): at dalvik.system.NativeStart.main(Native Method) 

MD의에 대한 로그 캣과 레디의 답변

12-30 12:17:26.023: E/AndroidRuntime(13545): FATAL EXCEPTION: main 
12-30 12:17:26.023: E/AndroidRuntime(13545): java.lang.NullPointerException 
12-30 12:17:26.023: E/AndroidRuntime(13545): at com.fortuna.cinemalk.TheaterDetailFragment.addListenerOnRatingBar(TheaterDetailFragment.java:126) 
12-30 12:17:26.023: E/AndroidRuntime(13545): at com.fortuna.cinemalk.TheaterDetailFragment.onCreateView(TheaterDetailFragment.java:100) 
12-30 12:17:26.023: E/AndroidRuntime(13545): at android.support.v4.app.Fragment.performCreateView(Fragment.java:1460) 
12-30 12:17:26.023: E/AndroidRuntime(13545): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:911) 
+1

어디에서 logcat입니까? –

+0

코드에서 구현 한'Ratingbar'를 볼 수 없습니다 ... –

+0

선언 한 ratingBar를 사용한 적이 없습니다. 따라서 작동하지 않습니다. –

답변

3

같은 onCreateView에서 호출 방법은()이 방법과 같이 addListenerOnRatingBar(....) 당신의 addListenerOnRatingBar(....)

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 

    View view = inflater.inflate(R.layout.theaterdetail_fragment, 
      container, false); 

    addListenerOnRatingBar(view); 
    ........ 
    } 

에 인수로 RootView을 통과하고 실행하십시오.

public void addListenerOnRatingBar(View v) { 

     ratingBar = (RatingBar) v.findViewById(R.id.ratingBar1); 
     txtRatingValue = (TextView) v.findViewById(R.id.txtRatingValue); 

     //if rating value is changed, 
     //display the current rating value in the result (textview) automatically 
     ratingBar.setOnRatingBarChangeListener(new OnRatingBarChangeListener() { 
      public void onRatingChanged(RatingBar ratingBar, float rating, 
       boolean fromUser) { 

       txtRatingValue.setText(String.valueOf(rating)); 

      } 
     }); 
     } 
+0

널 포인트 예외가 발생합니다. ratingBar.setOnRatingBarChangeListene r (새 OnRatingBarChangeListener() { 및 addListenerOnRatingBar (보기); – CraZyDroiD

+0

@CraZyDroiD Ok.Post 귀하의 로그 .... 다음 –

+0

지금 please.i 내 질문에 업데이 트를 확인하십시오. – CraZyDroiD

0

업데이트이 코드

ratingBar = (RatingBar) getView().findViewById(R.id.ratingBar1); 
txtRatingValue = (TextView) getView().findViewById(R.id.txtRatingValue); 
이 같이

onCreateView()이 유지 또는 해당 메소드에 해당보기를 통과 용도.

public void addListenerOnRatingBar(View view) { 
    ratingBar = (RatingBar) view.findViewById(R.id.ratingBar1); 
    txtRatingValue = (TextView) view.findViewById(R.id.txtRatingValue); 
} 

addListenerOnRatingBar(view);

+0

null 입력 오류 예외가 발생하는 곳 : addListenerOnRatingBar(); 및 ratingBar.setOnRatingBarChangeListener (새 OnRatingBarChangeListener() { \t \t \t \t 공공 무효가 onRatingChanged (RatingBar ratingBar, 플로트 평가, \t \t \t \t \t 부울 fromUser가) {이제 – CraZyDroiD

+0

업데이트 응답 검사가 ..가이 MD와 같은 방법입니다 –

+0

작동합니다 – CraZyDroiD

관련 문제