如何从 imagebutton 打开 webview?
How to open a webview from imagebutton?
我在一个片段中有三个按钮,当用户单击一个按钮时,它将在应用程序中打开一个特定的网页。当我尝试 运行 phone 上的此代码时,当我尝试访问该选项卡时它崩溃了。
我的 .java class 就在这里:
public class SocialMediaFragment extends Fragment {
public ImageButton fbbutton;
public ImageButton twbutton;
public ImageButton igbutton;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_socialmedia, container, false);
fbbutton = (ImageButton) getActivity().findViewById(R.id.fbbutton);
twbutton = (ImageButton) getActivity().findViewById(R.id.twbutton);
igbutton = (ImageButton) getActivity().findViewById(R.id.igbutton);
fbbutton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://www.facebook.com/universityofhouston"));
startActivity(browserIntent);
}
});
twbutton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("website"));
startActivity(browserIntent);
}});
igbutton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("website"));
startActivity(browserIntent);
}});
return rootView;
}
}
这是我正在使用的片段 (XML) 文件:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/uhwallpaper">
<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/fbbutton"
android:background="@drawable/fb"
android:layout_marginStart="46dp"
android:layout_centerVertical="true"
android:layout_alignParentStart="true" />
<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/twbutton"
android:background="@drawable/twitter"
android:layout_above="@+id/igbutton"
android:layout_toEndOf="@+id/fbbutton"
android:layout_marginStart="43dp" />
<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/igbutton"
android:background="@drawable/instagram"
android:layout_below="@+id/fbbutton"
android:layout_centerHorizontal="true"
android:layout_marginTop="32dp" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/socialslogan"
android:background="@drawable/slogan_social"
android:layout_alignParentTop="true"
android:layout_alignParentStart="true"
android:layout_marginTop="16dp" />
</RelativeLayout>
我希望这是可以解决的!如果您需要更多信息,请告诉我。
这是我的错误报告:
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ImageButton.setOnClickListener(android.view.View$OnClickListener)' on a null object reference
at info.teammumu.cougarcardapp.SocialMediaFragment.onCreateView(SocialMediaFragment.java:28)
1) 你在片段里面,所以你的元素必须在布局里面定义 fragment_socialmedia.xml
View rootView = inflater.inflate(R.layout.fragment_socialmedia, container, false);
mDrawerLayout = (DrawerLayout) rootView.findViewById(R.id.drawer_layout);
mDrawerList = (ListView) rootView.findViewById(R.id.list_slidermenu);
fbbutton = (ImageButton) rootView.findViewById(R.id.fbbutton);
twbutton = (ImageButton) rootView.findViewById(R.id.twbutton);
igbutton = (ImageButton) rootView.findViewById(R.id.igbutton);
2)、在onClick
方法中添加@override
:
fbbutton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://www.facebook.com/universityofhouston"));
startActivity(browserIntent);
}});
您的 fbbutton 从未分配过。它默认为 null。通过 findViewById() 像布局中的其他视图一样初始化它。
首先,我认为它应该按照 Elenasys 所设想的方式工作。
另一种尝试是更改您的布局 xml 并附加要在 xml:
中调用的方法
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/uhwallpaper">
<ImageButton
android:onClick="myMethod"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/fbbutton"
android:background="@drawable/fb"
android:layout_marginStart="46dp"
android:layout_centerVertical="true"
android:layout_alignParentStart="true" />
...
</RelativeLayout>
然后你必须在你的 activity 中编写一个方法来保存你的片段,如下所示:
/**
* Method inside the activity holding your fragment.
*/
public void myMethod(View view){
Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://www.facebook.com/universityofhouston"));
startActivity(browserIntent);
}
有帮助吗?
原来问题出在这些人身上:
fbbutton = (ImageButton) getActivity().findViewById(R.id.fbbutton);
twbutton = (ImageButton) getActivity().findViewById(R.id.twbutton);
igbutton = (ImageButton) getActivity().findViewById(R.id.igbutton);
他们应该是:
fbbutton = (ImageButton) rootView.findViewById(R.id.fbbutton);
twbutton = (ImageButton) rootView.findViewById(R.id.twbutton);
igbutton = (ImageButton) rootView.findViewById(R.id.igbutton);
我在一个片段中有三个按钮,当用户单击一个按钮时,它将在应用程序中打开一个特定的网页。当我尝试 运行 phone 上的此代码时,当我尝试访问该选项卡时它崩溃了。
我的 .java class 就在这里:
public class SocialMediaFragment extends Fragment {
public ImageButton fbbutton;
public ImageButton twbutton;
public ImageButton igbutton;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_socialmedia, container, false);
fbbutton = (ImageButton) getActivity().findViewById(R.id.fbbutton);
twbutton = (ImageButton) getActivity().findViewById(R.id.twbutton);
igbutton = (ImageButton) getActivity().findViewById(R.id.igbutton);
fbbutton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://www.facebook.com/universityofhouston"));
startActivity(browserIntent);
}
});
twbutton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("website"));
startActivity(browserIntent);
}});
igbutton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("website"));
startActivity(browserIntent);
}});
return rootView;
}
}
这是我正在使用的片段 (XML) 文件:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/uhwallpaper">
<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/fbbutton"
android:background="@drawable/fb"
android:layout_marginStart="46dp"
android:layout_centerVertical="true"
android:layout_alignParentStart="true" />
<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/twbutton"
android:background="@drawable/twitter"
android:layout_above="@+id/igbutton"
android:layout_toEndOf="@+id/fbbutton"
android:layout_marginStart="43dp" />
<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/igbutton"
android:background="@drawable/instagram"
android:layout_below="@+id/fbbutton"
android:layout_centerHorizontal="true"
android:layout_marginTop="32dp" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/socialslogan"
android:background="@drawable/slogan_social"
android:layout_alignParentTop="true"
android:layout_alignParentStart="true"
android:layout_marginTop="16dp" />
</RelativeLayout>
我希望这是可以解决的!如果您需要更多信息,请告诉我。
这是我的错误报告:
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ImageButton.setOnClickListener(android.view.View$OnClickListener)' on a null object reference
at info.teammumu.cougarcardapp.SocialMediaFragment.onCreateView(SocialMediaFragment.java:28)
1) 你在片段里面,所以你的元素必须在布局里面定义 fragment_socialmedia.xml
View rootView = inflater.inflate(R.layout.fragment_socialmedia, container, false);
mDrawerLayout = (DrawerLayout) rootView.findViewById(R.id.drawer_layout);
mDrawerList = (ListView) rootView.findViewById(R.id.list_slidermenu);
fbbutton = (ImageButton) rootView.findViewById(R.id.fbbutton);
twbutton = (ImageButton) rootView.findViewById(R.id.twbutton);
igbutton = (ImageButton) rootView.findViewById(R.id.igbutton);
2)、在onClick
方法中添加@override
:
fbbutton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://www.facebook.com/universityofhouston"));
startActivity(browserIntent);
}});
您的 fbbutton 从未分配过。它默认为 null。通过 findViewById() 像布局中的其他视图一样初始化它。
首先,我认为它应该按照 Elenasys 所设想的方式工作。 另一种尝试是更改您的布局 xml 并附加要在 xml:
中调用的方法<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/uhwallpaper">
<ImageButton
android:onClick="myMethod"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/fbbutton"
android:background="@drawable/fb"
android:layout_marginStart="46dp"
android:layout_centerVertical="true"
android:layout_alignParentStart="true" />
...
</RelativeLayout>
然后你必须在你的 activity 中编写一个方法来保存你的片段,如下所示:
/**
* Method inside the activity holding your fragment.
*/
public void myMethod(View view){
Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://www.facebook.com/universityofhouston"));
startActivity(browserIntent);
}
有帮助吗?
原来问题出在这些人身上:
fbbutton = (ImageButton) getActivity().findViewById(R.id.fbbutton);
twbutton = (ImageButton) getActivity().findViewById(R.id.twbutton);
igbutton = (ImageButton) getActivity().findViewById(R.id.igbutton);
他们应该是:
fbbutton = (ImageButton) rootView.findViewById(R.id.fbbutton);
twbutton = (ImageButton) rootView.findViewById(R.id.twbutton);
igbutton = (ImageButton) rootView.findViewById(R.id.igbutton);