如何使用片段中的按钮启动 activity?
How to start an activity with a button from a fragment?
我有一个片段有一个浮动操作按钮,我想在按下时启动 activity。这是我要从中启动的片段的代码:
package com.nhscoding.safe2tell;
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
public class LEARN extends Fragment {
View rootview;
private OnFragmentInteractionListener mListener;
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
rootview = inflater.inflate(R.layout.fragment_learn, container, false);
return rootview;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
final Button subTip = (Button) getActivity().findViewById(R.id.subTip);
subTip.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent (v.getContext(),SUBMIT_TIP.class);
startActivityForResult(intent,0);
}
});
}
public void onButtonPressed(Uri uri) {
if (mListener != null) {
mListener.onFragmentInteraction(uri);
}
}
@Override
public void onDetach() {
super.onDetach();
mListener = null;
}
public static LEARN newInstance() {
LEARN fragment = new LEARN();
Bundle args = new Bundle();
fragment.setArguments(args);
return fragment;
}
public interface OnFragmentInteractionListener {
// TODO: Update argument type and name
public void onFragmentInteraction(Uri uri);
}
//public class Stuff extends Activity {
// Button submit_tip = (Button) findViewById(R.id.submit_tip);
// submit_tip.setOnClickListener(new View.OnClickListener() {
// public void onClick(View v) {
// Intent intent = new Intent(v.getContext(), SUBMIT_TIP.class);
// startActivityForResult(intent,0);
// }
}
这 returns findViewById 错误,因为它不能在片段中使用,只能在 activity 中使用。我需要将其更改为 activity 还是有其他方法可以完成此操作?
使用 rootview
从片段布局访问按钮:
final Button subTip = (Button) rootview.findViewById(R.id.subTip);
注意: getActivity()
return main Activity 当前片段被添加的上下文所以如果我们调用 rootview.findViewById
意味着我们正在从 Activity 布局而不是 Fragment
访问视图
在 Fragment
的 onCreate()
方法中获取对 View
的引用将不起作用,因为 Fragment
的布局尚未扩充。
您只需更换
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
final Button subTip = (Button) getActivity().findViewById(R.id.subTip);
subTip.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent (v.getContext(),SUBMIT_TIP.class);
startActivityForResult(intent,0);
}
});
}
有了这个:
@Override
public void onViewCreated (View view, Bundle savedInstanceState){
final FloatingActionButton subTip = (FloatingActionButton) view.findViewById(R.id.subTip);
subTip.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent (v.getContext(),SUBMIT_TIP.class);
startActivityForResult(intent,0);
}
});
}
试试这个。这会起作用。
你可以使用这个。您可以通过 getActivity
获取当前的 activity 。
@Override
public void onViewCreated (View rootView, Bundle savedInstanceState){
final Button b= (Button) rootView.findViewById(R.id.b);
b.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent (v.getContext(),yourActivity.class);
startActivityForResult(intent,0);
}
}
);
}
我有一个片段有一个浮动操作按钮,我想在按下时启动 activity。这是我要从中启动的片段的代码:
package com.nhscoding.safe2tell;
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
public class LEARN extends Fragment {
View rootview;
private OnFragmentInteractionListener mListener;
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
rootview = inflater.inflate(R.layout.fragment_learn, container, false);
return rootview;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
final Button subTip = (Button) getActivity().findViewById(R.id.subTip);
subTip.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent (v.getContext(),SUBMIT_TIP.class);
startActivityForResult(intent,0);
}
});
}
public void onButtonPressed(Uri uri) {
if (mListener != null) {
mListener.onFragmentInteraction(uri);
}
}
@Override
public void onDetach() {
super.onDetach();
mListener = null;
}
public static LEARN newInstance() {
LEARN fragment = new LEARN();
Bundle args = new Bundle();
fragment.setArguments(args);
return fragment;
}
public interface OnFragmentInteractionListener {
// TODO: Update argument type and name
public void onFragmentInteraction(Uri uri);
}
//public class Stuff extends Activity {
// Button submit_tip = (Button) findViewById(R.id.submit_tip);
// submit_tip.setOnClickListener(new View.OnClickListener() {
// public void onClick(View v) {
// Intent intent = new Intent(v.getContext(), SUBMIT_TIP.class);
// startActivityForResult(intent,0);
// }
}
这 returns findViewById 错误,因为它不能在片段中使用,只能在 activity 中使用。我需要将其更改为 activity 还是有其他方法可以完成此操作?
使用 rootview
从片段布局访问按钮:
final Button subTip = (Button) rootview.findViewById(R.id.subTip);
注意: getActivity()
return main Activity 当前片段被添加的上下文所以如果我们调用 rootview.findViewById
意味着我们正在从 Activity 布局而不是 Fragment
在 Fragment
的 onCreate()
方法中获取对 View
的引用将不起作用,因为 Fragment
的布局尚未扩充。
您只需更换
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
final Button subTip = (Button) getActivity().findViewById(R.id.subTip);
subTip.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent (v.getContext(),SUBMIT_TIP.class);
startActivityForResult(intent,0);
}
});
}
有了这个:
@Override
public void onViewCreated (View view, Bundle savedInstanceState){
final FloatingActionButton subTip = (FloatingActionButton) view.findViewById(R.id.subTip);
subTip.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent (v.getContext(),SUBMIT_TIP.class);
startActivityForResult(intent,0);
}
});
}
试试这个。这会起作用。
你可以使用这个。您可以通过 getActivity
获取当前的 activity 。
@Override
public void onViewCreated (View rootView, Bundle savedInstanceState){
final Button b= (Button) rootView.findViewById(R.id.b);
b.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent (v.getContext(),yourActivity.class);
startActivityForResult(intent,0);
}
}
);
}