Cómo configurar imagebutton src en onCreateView?

En mi aplicación, tengo varios ImageButton s que están controlados por sus respectivos StateListDrawable s. Los utilizo como menú de pestañas en la parte inferior de la actividad para cambiar fragmentos. Ellos cambian los estados muy bien (cuando se presiona, se centra, por defecto). El cambio de fragmentos también funciona bien. Sin embargo, no sé cómo se puede resaltar un botón (por ejemplo, utilizar el conjunto de imágenes cuando se presiona) cuando el fragmento que representa se muestra en la actualidad.

He intentado fijar el BackgroundResource , ImageDrawable , ImageResource durante runtime pero estoy consiguiendo un NullPointerException cada vez que lanzo mi app.

Aquí está mi registro si esto ayuda

 05-16 14:15:19.489: E/AndroidRuntime(4800): FATAL EXCEPTION: main 05-16 14:15:19.489: E/AndroidRuntime(4800): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.meralco/com.meralco.pms.TestPMSActivity}: java.lang.NullPointerException 05-16 14:15:19.489: E/AndroidRuntime(4800): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1651) 05-16 14:15:19.489: E/AndroidRuntime(4800): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1667) 05-16 14:15:19.489: E/AndroidRuntime(4800): at android.app.ActivityThread.access$1500(ActivityThread.java:117) 05-16 14:15:19.489: E/AndroidRuntime(4800): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:935) 05-16 14:15:19.489: E/AndroidRuntime(4800): at android.os.Handler.dispatchMessage(Handler.java:99) 05-16 14:15:19.489: E/AndroidRuntime(4800): at android.os.Looper.loop(Looper.java:130) 05-16 14:15:19.489: E/AndroidRuntime(4800): at android.app.ActivityThread.main(ActivityThread.java:3687) 05-16 14:15:19.489: E/AndroidRuntime(4800): at java.lang.reflect.Method.invokeNative(Native Method) 05-16 14:15:19.489: E/AndroidRuntime(4800): at java.lang.reflect.Method.invoke(Method.java:507) 05-16 14:15:19.489: E/AndroidRuntime(4800): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867) 05-16 14:15:19.489: E/AndroidRuntime(4800): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625) 05-16 14:15:19.489: E/AndroidRuntime(4800): at dalvik.system.NativeStart.main(Native Method) 05-16 14:15:19.489: E/AndroidRuntime(4800): Caused by: java.lang.NullPointerException 05-16 14:15:19.489: E/AndroidRuntime(4800): at com.meralco.pms.HomeFragment.onCreateView(HomeFragment.java:19) 05-16 14:15:19.489: E/AndroidRuntime(4800): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:870) 05-16 14:15:19.489: E/AndroidRuntime(4800): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1080) 05-16 14:15:19.489: E/AndroidRuntime(4800): at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:622) 05-16 14:15:19.489: E/AndroidRuntime(4800): at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1416) 05-16 14:15:19.489: E/AndroidRuntime(4800): at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:505) 05-16 14:15:19.489: E/AndroidRuntime(4800): at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1129) 05-16 14:15:19.489: E/AndroidRuntime(4800): at android.app.Activity.performStart(Activity.java:3791) 05-16 14:15:19.489: E/AndroidRuntime(4800): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1624) 05-16 14:15:19.489: E/AndroidRuntime(4800): ... 11 more 

Aquí está HomeFragment.xml:

 public class HomeFragment extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.home, container, false); ImageButton btn_sin = (ImageButton) view.findViewById(R.drawable.button_sin); btn_sin.setBackgroundResource(R.drawable.pp_sin_1); return view; } } 

Home.xml

  <?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:gravity="center_horizontal|center_vertical" > <TextView android:id="@+id/home_text1" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@string/home_text1" android:textSize="20sp" android:textStyle="bold" android:textColor="#000000" android:padding="10dp" android:gravity="center_horizontal|center_vertical" /> <TextView android:id="@+id/home_text2" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@string/home_text2" android:textSize="12sp" android:textColor="#000000" android:paddingLeft="10dp" android:paddingRight="10dp" android:gravity="center_horizontal|center_vertical"/> <TextView android:id="@+id/home_text3" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@string/home_text3" android:textSize="10sp" android:textColor="#000000" android:padding="15dp" android:textStyle="italic" android:gravity="center_horizontal|center_vertical"/> </LinearLayout> 

Main.xml:

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <ImageView android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight="0.3" android:src="@drawable/phone_portrait_bg_01" /> <FrameLayout android:id="@+id/fragment_content" android:layout_weight="7" android:layout_width="match_parent" android:layout_height="0dp"> <ImageView android:src="@drawable/phone_portrait_bg_02" android:layout_width="match_parent" android:layout_height="match_parent" android:scaleType="centerCrop"/> </FrameLayout> <fragment class="com.meralco.pms.ButtonsHandler" android:id="@+id/titles" android:layout_weight="1" android:layout_width="match_parent" android:layout_height="0dp" > <!-- Preview: layout=@layout/buttons --> </fragment> </LinearLayout> 

BotonesHandler.java

 public class ButtonsHandler extends Fragment{ @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment return inflater.inflate(R.layout.buttons, container, false); } } 

Buttons.xml

 <?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:gravity="center_horizontal|center_vertical"> <ImageButton android:id="@+id/button_sin" android:layout_weight="1" android:layout_width="0dp" android:layout_height="wrap_content" android:background="#000000" android:src="@drawable/button_sin" android:onClick="buttonClick" /> <ImageButton android:id="@+id/button_city" android:layout_weight="1" android:layout_width="0dp" android:layout_height="match_parent" android:background="#000000" android:src="@drawable/button_city" android:onClick="buttonClick" /> <ImageButton android:id="@+id/button_date" android:layout_weight="1" android:layout_width="0dp" android:layout_height="match_parent" android:background="#000000" android:src="@drawable/button_date" android:onClick="buttonClick" /> <ImageButton android:id="@+id/button_all" android:layout_weight="1" android:layout_width="0dp" android:layout_height="match_parent" android:background="#000000" android:src="@drawable/button_all" android:onClick="buttonClick" /> <ImageButton android:id="@+id/button_help" android:layout_weight="1" android:layout_width="0dp" android:layout_height="match_parent" android:background="#000000" android:src="@drawable/button_help" android:onClick="buttonClick" /> </LinearLayout> 

TIA!

 ImageButton btn = (ImageButton)findViewById(R.id.button1); btn.setImageResource(R.drawable.newimage); 

Intenta de esta manera

 ImageButton btn_sin = (ImageButton) view.findViewById(R.id.button_sin); btn_sin.setImageResource(R.drawable.pp_sin_1); 

No se puede acceder a button_sin en HomeFragment porque HomeFragment utiliza el diseño home.xml .

Yo puedo hacer el siguiente

 public class ButtonsHandler extends Fragment{ @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment View v = inflater.inflate(R.layout.buttons, container, false); ImageButton btn_sin = (ImageButton) view.findViewById(R.id.button_sin); btn_sin.setBackgroundResource(R.drawable.pp_sin_1); return } } 

Para conectar un fragmento con una actividad, mira aquí

http://developer.android.com/guide/topics/fundamentals/fragments.html#CommunicatingWithActivity .

Así que primero conecta ButtonsHandler con su activity.Then crear un método en HomeFragment y sólo tiene que llamar a este método de su actividad.

El problema es con tu código

  ImageButton btn_sin = (ImageButton) view.findViewById(R.drawable.button_sin); 

Cambia esto a

  ImageButton btn_sin = (ImageButton) view.findViewById(R.id.button_sin); 

El R.id.button_sin debe ser su id de imagen en su diseño

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.