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

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-20 04:23:09  来源:igfitidea点击:

how to set imagebutton src in onCreateView?

android

提问by yojoannn

In my app, I have several ImageButtons that are controlled by their respective StateListDrawables. 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由它们各自的StateListDrawables控制的s。我将它们用作活动底部的选项卡菜单来切换片段。它们可以很好地改变状态(按下、聚焦、默认时)。片段的切换也可以正常工作。但是,我不知道如何在当前显示按钮代表的片段时突出显示按钮(例如,按下时使用图像集)。

I've tried setting the BackgroundResource, ImageDrawable, ImageResourceduring runtime but I am getting a NullPointerExceptioneverytime I launch my app.

我试过在运行时设置BackgroundResource, ImageDrawable,ImageResourceNullPointerException每次启动我的应用程序时都会得到一个。

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