您好我有理解为什么这不起作用的问题。我有一个按钮,当你点击它时它不会进入新的活动。我试图只需要一个简单的按钮点击即可转到另一个活动,该活动上面有一个片段。
我点击事件的代码如下:
public class PlanMeMainFragment extends Fragment {
private Button mNewButton, mExistingButton;
mNewButton = (Button)v.findViewById(R.id.new_event_button);
mNewButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
((PlanMeMainActivity) getActivity()).newActivityToLaunch(1);
}
});
return v;
}
}
我的活动
public class PlanMeMainActivity extends FragmentActivity {
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.planme_main_fragment);
}
public void newActivityToLaunch(int i) {
Intent myIntent;
switch(i){
case 1: myIntent = new Intent(PlanMeMainActivity.this, NewEventSetupActivity.class);
}
startActivity(myIntent);
}
}
我列出了清单:
<activity
android:name="com.pctoolman.planme.app.PlanMeMainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name="com.pctoolman.planme.app.NewEventSetupActivity"
android:label="@string/setup">
</activity>
答案 0 :(得分:1)
尝试别的,回答@vdisawar给我的想法:
片段中的:
// in your onClick method
// call a method in your Activity
((PlanMeMainActivity) getActivity()).newActivityToLaunch();
FragmentActivity中的:
// newActivityToLaunch method
public void newActivityToLaunch() {
Intent myIntent = new Intent(PlanMeMainActivity.this, NewEventSetupActivity.class);
startActivity(myIntent);
}
通过这个技巧,你可以用不同的片段用相同的方法调用不同的活动,让我们看一个简单的例子:
FragmentA想要启动Activity1:
// call a method with an integer
((MainActivity) getActivity()).newActivityToLaunch(1);
在另一个片段(FragmentB)中,这个想要启动Activity2:
// call the same method with another integer
((MainActivity) getActivity()).newActivityToLaunch(2);
然后在你的FragmentActivity中,方法是:
// newActivityToLaunch method
public void newActivityToLaunch(int i) {
// create a general intent
Intent myIntent = null;
// switch i received from fragments
switch(i) {
// received from FragmentA
case 1: myIntent = new Intent(MainActivity.this, Activity1.class);
// received from FragmentB
case 2: myIntent = new Intent(MainActivity.this, Activity2.class);
}
// start the activity
startActivity(myIntent);
}
希望这有帮助。
答案 1 :(得分:0)
尝试更改此内容:
<activity
android:name="com.pctoolman.planme.app.NewEventSetupActivity"
android:label="@string/setup">
</activity>
到此:
<activity
android:name="com.pctoolman.planme.app.NewEventSetupActivity"
android:label="@string/setup">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
答案 2 :(得分:0)
您应该在Fragment类中创建一个接口,并在片段膨胀的活动中实现该接口。这样,当您在活动中单击按钮时,将在片段中的onClick
方法中调用接口方法,并将在您的活动中执行该接口方法的代码。在这种情况下,您的方法将启动一个意图。
第1步:在片段类中创建接口
public interface OnFragmentInteractionListener {
public void onFragmentInteraction();
}
第2步:为片段类
中的接口创建变量private OnFragmentInteractionListener mListener;
第3步:通过覆盖onAttach方法并确保侦听器在片段活动中实现来初始化侦听器
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
try {
mListener = (OnFragmentInteractionListener) activity;
} catch (ClassCastException e) {
throw new ClassCastException(activity.toString()
+ " must implement OnFragmentInteractionListener");
}
}
第4步:处理片段类中的onClick方法
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.planme_main_fragment, container, false);
mNewButton = (Button)v.findViewById(R.id.new_event_button);
mNewButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mListener.onFragmentInteraction(); // executes this method in the activity
}
});
return v;
}
第5步:在您的活动中实施界面
public MainActivity extends Activity implements
PlanMeMainFragment.OnFragmentInteractionListener
覆盖活动中的界面方法
public void onFragmentInteraction(){
Intent intent = new Intent(this, NewEventSetupActivity.class);
startActivity(intent);
}
第7步:分离片段类中的侦听器
@Override
public void onDetach() {
super.onDetach();
mListener = null;
}
有关详细信息,请参阅Android培训课程 Communicating with Other Fragments。