Android 如何在onCreateView 中设置imagebutton src?
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/10613449/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
how to set imagebutton src in onCreateView?
提问by yojoannn
In my app, I have several ImageButton
s that are controlled by their respective StateListDrawable
s. I use them as tab menu at the bottom of the activity to switch fragments. They change states just fine (when pressed, focused, default). Switching of fragments also works okay. However, I don't know how can I make a button be highlighted (for example, use the image set when pressed) when the fragment it represents is currently shown.
在我的应用程序中,我有几个ImageButton
由它们各自的StateListDrawable
s控制的s。我将它们用作活动底部的选项卡菜单来切换片段。它们可以很好地改变状态(按下、聚焦、默认时)。片段的切换也可以正常工作。但是,我不知道如何在当前显示按钮代表的片段时突出显示按钮(例如,按下时使用图像集)。
I've tried setting the BackgroundResource
, ImageDrawable
, ImageResource
during runtime but I am getting a NullPointerException
everytime I launch my app.
我试过在运行时设置BackgroundResource
, ImageDrawable
,ImageResource
但NullPointerException
每次启动我的应用程序时都会得到一个。
Here's my log if this helps
如果这有帮助,这是我的日志
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.access00(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
Here's HomeFragment.xml:
这是 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
<?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>
ButtonsHandler.java
ButtonsHandler.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
<?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!
蒂亚!
回答by Android
ImageButton btn = (ImageButton)findViewById(R.id.button1);
btn.setImageResource(R.drawable.newimage);
回答by Khan
try this way
试试这个方法
ImageButton btn_sin = (ImageButton) view.findViewById(R.id.button_sin);
btn_sin.setImageResource(R.drawable.pp_sin_1);
回答by gutiory
You can't access to button_sinin HomeFragmentbecause HomeFragmentuses home.xmllayout.
您无法访问HomeFragment中的button_sin,因为HomeFragment使用home.xml布局。
Yo can do the next
你可以做下一个
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
}
}
回答by gutiory
For connecting a fragment with an activity, look here
要将片段与活动连接起来,请看这里
http://developer.android.com/guide/topics/fundamentals/fragments.html#CommunicatingWithActivity.
http://developer.android.com/guide/topics/fundamentals/fragments.html#CommunicatingWithActivity。
So first you connect ButtonsHandler with your activity.Then you create a method in HomeFragment and you just need to call this method from your activity.
因此,首先您将 ButtonsHandler 与您的活动连接起来。然后您在 HomeFragment 中创建一个方法,您只需要从您的活动中调用此方法。
回答by Ajay Venugopal
the problem is with your code
问题出在你的代码上
ImageButton btn_sin = (ImageButton) view.findViewById(R.drawable.button_sin);
change this to
将此更改为
ImageButton btn_sin = (ImageButton) view.findViewById(R.id.button_sin);
the R.id.button_sin must be your imagebutton id in your layout
R.id.button_sin 必须是您布局中的图像按钮 ID