2014-11-10 3 views
1

나는 조각에 +- 버튼이 그들을 눌러 내가 ProgressBar의 진행을 변경해야하지만, 대신에 내가 MainActivity에서 NullPointException의 ProgressBar

수 :

public void selectVentilatorFunction(View view) { 

    prg = (ProgressBar)view.findViewById(R.id.ventilator_progress); 
    int pressedbutton = view.getId(); 

    switch (pressedbutton){ 
    case R.id.increase: 
     if(int_ventilator < 100) int_ventilator = int_ventilator + 10; 
     break; 
    case R.id.decrease: 
     if(int_ventilator > 0) int_ventilator = int_ventilator - 10; 
     break; 
    } 
    prg.setProgress(int_ventilator); 
    Log.d(TAG,"Ventilator progresas " + int_ventilator); 
} 

Fragment.xml

<?xml version="1.0" encoding="utf-8"?> 
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="@android:color/black" > 


<RelativeLayout 
     android:id="@+id/buttonview" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_marginBottom="45dp" 
     android:layout_marginLeft="45dp" 
     android:layout_marginRight="45dp"> 

     <ProgressBar 
      android:id="@+id/ventilator_progress" 
      style="?android:attr/progressBarStyleHorizontal" 
      android:layout_width="match_parent" 
      android:layout_height="100dp" 
      android:layout_marginTop="200dp" 
      android:layout_alignParentTop="true" 
      android:progress="50"/> 

     <Button 
      android:id="@+id/decrease" 
      android:layout_width="250dp" 
      android:layout_height="160dp" 
      android:layout_marginBottom="625dp" 
      android:background="@android:color/transparent" 
      android:layout_alignParentBottom="true" 
      android:layout_alignParentLeft="true" 
      android:onClick="selectVentilatorFunction" /> 

     <Button 
      android:id="@+id/increase" 
      android:layout_width="250dp" 
      android:layout_height="160dp" 
      android:layout_marginBottom="625dp" 
      android:background="@android:color/transparent" 
      android:layout_alignParentBottom="true" 
      android:layout_alignParentRight="true" 
      android:onClick="selectVentilatorFunction" />   

     </RelativeLayout> 

     <ImageView   
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:contentDescription="@string/background" 
      android:background="@drawable/bg2" 
      android:scaleType="fitXY" /> 
</FrameLayout> 

로그 캣이 필요한 경우

11-10 13:53:52.870: E/AndroidRuntime(16452): FATAL EXCEPTION: main 
11-10 13:53:52.870: E/AndroidRuntime(16452): Process: com.example.leftpanelmenutest, PID: 16452 
11-10 13:53:52.870: E/AndroidRuntime(16452): java.lang.IllegalStateException: Could not execute method of the activity 
11-10 13:53:52.870: E/AndroidRuntime(16452): at android.view.View$1.onClick(View.java:3814) 
11-10 13:53:52.870: E/AndroidRuntime(16452): at android.view.View.performClick(View.java:4424) 
11-10 13:53:52.870: E/AndroidRuntime(16452): at android.view.View$PerformClick.run(View.java:18383) 
11-10 13:53:52.870: E/AndroidRuntime(16452): at android.os.Handler.handleCallback(Handler.java:733) 
11-10 13:53:52.870: E/AndroidRuntime(16452): at android.os.Handler.dispatchMessage(Handler.java:95) 
11-10 13:53:52.870: E/AndroidRuntime(16452): at android.os.Looper.loop(Looper.java:137) 
11-10 13:53:52.870: E/AndroidRuntime(16452): at android.app.ActivityThread.main(ActivityThread.java:4998) 
11-10 13:53:52.870: E/AndroidRuntime(16452): at java.lang.reflect.Method.invokeNative(Native Method) 
11-10 13:53:52.870: E/AndroidRuntime(16452): at java.lang.reflect.Method.invoke(Method.java:515) 
11-10 13:53:52.870: E/AndroidRuntime(16452): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:811) 
11-10 13:53:52.870: E/AndroidRuntime(16452): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:627) 
11-10 13:53:52.870: E/AndroidRuntime(16452): at dalvik.system.NativeStart.main(Native Method) 
11-10 13:53:52.870: E/AndroidRuntime(16452): Caused by: java.lang.reflect.InvocationTargetException 
11-10 13:53:52.870: E/AndroidRuntime(16452): at java.lang.reflect.Method.invokeNative(Native Method) 
11-10 13:53:52.870: E/AndroidRuntime(16452): at java.lang.reflect.Method.invoke(Method.java:515) 
11-10 13:53:52.870: E/AndroidRuntime(16452): at android.view.View$1.onClick(View.java:3809) 
11-10 13:53:52.870: E/AndroidRuntime(16452): ... 11 more 
11-10 13:53:52.870: E/AndroidRuntime(16452): Caused by: java.lang.NullPointerException 
11-10 13:53:52.870: E/AndroidRuntime(16452): at com.example.leftpanelmenutest.MainActivity.selectVentilatorFunction(MainActivity.java:76) 
11-10 13:53:52.870: E/AndroidRuntime(16452): ... 14 more 

편집

전체 코드는, 그것은 훨씬 없다. MainActivity에는 4 개의 버튼이 있으며 프래그먼트를 선택합니다.

public class MainActivity extends Activity { 

    final protected static String TAG = "MainActivity"; 

    Fragment fr; 
    FragmentManager fm; 
    FragmentTransaction fragmentTransaction; 
    boolean firsttime; 
    byte[] myData = {10,20}; 
    public ProgressBar prg; 
    int int_ventilator = 0, int_light = 0; 

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

     getWindow().getDecorView().setSystemUiVisibility(
       View.SYSTEM_UI_FLAG_LAYOUT_STABLE 
       | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION 
       | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN 
       | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION 
       | View.SYSTEM_UI_FLAG_FULLSCREEN 
       | View.SYSTEM_UI_FLAG_IMMERSIVE); 
     if(fr==null){ 
     fr = new StartMenu(); 
     fm = getFragmentManager(); 
     fragmentTransaction = fm.beginTransaction(); 
     fragmentTransaction.setCustomAnimations(android.R.animator.fade_in, android.R.animator.fade_out); 
     fragmentTransaction.add(R.id.fragment_place, fr); 
     fragmentTransaction.commit(); 

     } 

} 

    public byte[] getMyData() { 
     return myData; 
    } 
    public int getInt() { 
     return int_ventilator; 
    } 

    public void selectMainFunction(View view) { 

    } 

    public void selectVentilatorFunction(View view) { 
     int pressedbutton = view.getId(); 
     prg = (ProgressBar)view.findViewById(R.id.ventilator_progress); 
     switch (pressedbutton){ 
     case R.id.increase: 
      if(int_ventilator < 100) int_ventilator = int_ventilator + 10; 
      break; 
     case R.id.decrease: 
      if(int_ventilator > 0) int_ventilator = int_ventilator - 10; 
      break; 
     } 
     prg.setProgress(int_ventilator); 
     Log.d(TAG,"Ventilator progresas " + int_ventilator); 
    } 

    public void selectIndoorLightFunction(View view) { 
     int pressedbutton = view.getId(); 
     switch (pressedbutton){ 
     case R.id.increase: 
      if(int_light < 100) int_light = int_light + 10; 
      break; 
     case R.id.decrease: 
      if(int_light > 0) int_light = int_light - 10; 
      break; 
     } 
     Log.d(TAG,"Light progresas " + int_light); 
    } 

public void selectOutdoorFunction(View view) { 

    } 

    public void selectMenu(View view) { 
     int pressedbutton = view.getId(); 


     switch (pressedbutton){ 
     case R.id.startmenu: 
      fr = new StartMenu(); 
      break; 
     case R.id.ventilatormenu: 
      fr = new VentilatorMenu(); 
      break; 
     case R.id.indoormenu: 
      fr = new IndoorLightMenu(); 
      break; 
     case R.id.outdoormenu: 
      fr = new OutdoorLight(); 
      break; 
     } 
     fm = getFragmentManager(); 
     fragmentTransaction = fm.beginTransaction(); 
     fragmentTransaction.setCustomAnimations(android.R.animator.fade_in, android.R.animator.fade_out); 
     fragmentTransaction.replace(R.id.fragment_place, fr); 
     fragmentTransaction.commit(); 

    } 
} 

onCreateView에서 레이아웃보기 참조를 사용 VentilatorFragment

public class VentilatorMenu extends Fragment{ 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     Log.e("Test", "VENTILATOR"); 
    } 

    @Override 
    public void onActivityCreated(Bundle savedInstanceState) { 
     super.onActivityCreated(savedInstanceState); 

    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
     MainActivity activity = (MainActivity) getActivity(); 
     View view = inflater.inflate(R.layout.bg2layout, container, false); 
     return view; 
    } 

} 
+1

아마도 view가 null입니다. –

+0

null 일 수 있습니까? – Martynas

+1

전체 코드를 보지 않고 말할 수 없습니다 –

답변

1

초기화의 ProgressBar() 대신 버튼을 클릭 뷰 참조 대신 단편에서 활동을 버튼 클릭 리스너를 구현해야합니다.

public class VentilatorMenu extends Fragment{ 

    private ProgressBar prg; 
    private Button decrease; 
    private Button increase; 
    private int int_ventilator; 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     Log.e("Test", "VENTILATOR"); 
    } 

    @Override 
    public void onActivityCreated(Bundle savedInstanceState) { 
     super.onActivityCreated(savedInstanceState); 

    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.bg2layout, container, false); 
     prg = (ProgressBar)view.findViewById(R.id.ventilator_progress); 
     decrease = (ProgressBar)view.findViewById(R.id.decrease); 
     increase = (ProgressBar)view.findViewById(R.id.increase); 
     decrease.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       if(int_ventilator > 0){ 
        int_ventilator = int_ventilator - 10; 
       } 
       prg.setProgress(int_ventilator); 
       Log.d(TAG,"Ventilator progresas " + int_ventilator); 
      } 
     }); 
     increase.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       if(int_ventilator < 100) { 
        int_ventilator = int_ventilator + 10; 
       } 
       prg.setProgress(int_ventilator); 
       Log.d(TAG,"Ventilator progresas " + int_ventilator); 
      } 
     }); 
     return view; 
    } 

} 
+0

이걸 시도했지만 MainActivity에서 조각 클래스 – Martynas

+0

@ Martynas가 아닌'selectVentilatorFunction'을 검색합니다. 게시 한 xml Button과 ProgressBar에도 있습니다. –

+0

@ Martynas, 업데이트 된 코드를 확인하십시오. –

0

먼저 선언하여 ProgressBar 전역 변수로 : onCreateView 내부 그리고

private ProgressBar; 

(), 수행

prg = (ProgressBar)view.findViewById(R.id.ventilator_progress); 

그런 다음, selectVentilatorFunction(View view) 내부 :

int pressedbutton = view.getId(); 

switch (pressedbutton){ 
case R.id.increase: 
    if(int_ventilator < 100) int_ventilator = int_ventilator + 10; 
    break; 
case R.id.decrease: 
    if(int_ventilator > 0) int_ventilator = int_ventilator - 10; 
    break; 
} 
prg.setProgress(int_ventilator); 
Log.d(TAG,"Ventilator progresas " + int_ventilator); 

그러면 NPE 문제가 해결됩니다.

조각에 도달하지 않은 onClick XML 콜백에 대해 here 해결책을 볼 수 있습니다.

+0

'selectVentilatorFunction (view view) :'는'MainActivity'에 있고 선언은에 있어야합니다. 조각 클래스? – Martynas

+0

링크의 두 번째 대답이 표시되면 두 번째 문제를 해결하는 방법을 알 수 있습니다. 단편에서 OnClickListener를 구현하십시오. – joao2fast4u