ProgressBar dans le fragment
J'ai +
et -
boutons du fragment et en appuyant sur eux, j'ai besoin de changer les progrès de ProgressBar
, mais au lieu de cela je obtenir NullPointException
Dans MainActivity:
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>
LogCat si nécessaire
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
MODIFIER
Code complet, il n'y en a pas beaucoup en elle. Dans MainActivity j'ai 4 boutons et sélectionnez le fragment.
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();
}
}
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;
}
}
- probablement est null
- comment peut-il être nul?
- je ne peux pas vous dire sans voir tout le code
- pouvez-vous s'il vous plaît poster fragment de code entier ?
- Vous appliquez un onClick auditeur en XML. Sur votre code, avec la ligne
prg = (ProgressBar)view.findViewById(R.id.ventilator_progress);
, vous en êtes la cause d'un NPE, parce que la vue est votre Touche, pas votre fragment de vue. - Juste faire
prg
une variable globale, de sorte que vous pouvez modifier à partir de l'intérieurselectVentilatorFunction(View view)
méthode , comme vous voulez. - je pense que vous êtes à 110% de droite!
- Poople demandent pour l'ensemble de la classe code, collez-le en premier.
- J'ai édité question avec le code complet.
Vous devez vous connecter pour publier un commentaire.
Initialiser ProgressBar à l'aide de votre mode de mise en référence dans onCreateView() au lieu de clic sur un bouton de la vue de référence et de mettre en place de cliquez sur le bouton de l'écouteur dans le fragment au lieu de l'activité.
selectVentilatorFunction
pas dans le fragment de classeD'abord, déclarer votre
ProgressBar
comme une variable globale:Puis à l'intérieur de onCreateView(), faites:
Puis, à l'intérieur
selectVentilatorFunction(View view)
:Cela permettra de résoudre votre NPE problème.
Sur votre onClick XML rappel de ne pas arriver à votre fragment, vous pouvez voir ici pour trouver une solution.
selectVentilatorFunction(View view):
est dansMainActivity
et de la déclaration qui doit être dans le fragment de classe?