Java 如何在刷卡后访问下一个片段中的按钮?
正如你在这张照片中看到的,如果我点击标题1中的2按钮,就会出现Java 如何在刷卡后访问下一个片段中的按钮?,java,android,android-fragments,Java,Android,Android Fragments,正如你在这张照片中看到的,如果我点击标题1中的2按钮,就会出现FrameLayout中的Fragment。但是,如果我滑动到标题2,则两个按钮不起作用 代码如下: package com.flashcards; import android.os.Bundle; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android
FrameLayout
中的Fragment
。但是,如果我滑动到标题2,则两个按钮不起作用
代码如下:
package com.flashcards;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
/**
* A simple {@link Fragment} subclass.
* Use the {@link BaseFlashCardsFragment#newInstance} factory method to
* create an instance of this fragment.
*/
public class BaseFlashCardsFragment extends Fragment implements View.OnClickListener {
// TODO: Rename parameter arguments, choose names that match
// the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
private static final String ARG_POSITION = "position";
// TODO: Rename and change types of parameters
private int position;
private String mParam2;
public BaseFlashCardsFragment() {
// Required empty public constructor
}
/**
* Use this factory method to create a new instance of
* this fragment using the provided parameters.
*
* @param position Parameter 1.
* @return A new instance of fragment BaseFlashCardsFragment.
*/
// TODO: Rename and change types and number of parameters
public static BaseFlashCardsFragment newInstance(int position) {
BaseFlashCardsFragment fragment = new BaseFlashCardsFragment();
Bundle args = new Bundle();
args.putInt(ARG_POSITION, position);
fragment.setArguments(args);
return fragment;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (getArguments() != null) {
position = getArguments().getInt(ARG_POSITION, 0);
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View rootView = null;
int layoutId;
switch (position) {
case 0: layoutId = R.layout.limits_flashcardsfragment1; break;
case 1: layoutId = R.layout.limits_flashcardsfragment2; break;
default: layoutId = R.layout.limits_flashcardsfragment3; break;
}
rootView = inflater.inflate(layoutId, container, false);
rootView.findViewById(R.id.buttonterm).setOnClickListener(this);
rootView.findViewById(R.id.buttondefinition).setOnClickListener(this);
switchPage(new limits_fragmentpageA());
switchPage(new limits_fragmentpageB());
return rootView;
}
@Override
public void onClick(View view) {
int viewId = view.getId();
if (viewId == R.id.buttonterm)
switchPage(new limits_fragmentpageA());
else if (viewId == R.id.buttondefinition)
switchPage(new limits_fragmentpageAA());
else if (viewId == R.id.buttonterm)
switchPage(new limits_fragmentpageB());
else if (viewId == R.id.buttondefinition)
switchPage(new limits_fragmentpageBB());
}
private void switchPage (Fragment fragment){
android.support.v4.app.FragmentManager manager = getFragmentManager();
manager.beginTransaction()
.replace(R.id.activity_main_fragmentcontainer, fragment)
.commit();
}
}
您还可以获得清晰的视图。正如我所见,您需要在活动中包含所有元素(按钮、viewpager、标题等),而不是在片段中,因为它在所有片段中共享,所以您不需要在每个片段中重新创建它们 要更改标题(和较低的提示),需要将
OnPageChangeListener
添加到viewpager适配器
要在术语/定义之间切换片段,您需要在这些按钮的
OnClickListener
中直接传递事件,如“(BaseCardFragment)adapter.InstanceItem(viewpager、viewpager.getCurrentItem)、flipToTerm()或flipToDefinition()
”我认为问题在于,如果你在片段中,你应该getChildFragmentManager()
而不是getFragmentManager()
也许你应该像这样重写switchPage()
private void开关页(片段){
android.support.v4.app.FragmentManager=getChildFragmentManager();
经理:开始营业()
.替换(R.id.activity\u main\u fragmentcontainer,fragment)
.commit();
}
getChildFragmentManager();正在工作,但是它只能显示一个片段,而这行代码不工作“switchPage(new limits_fragmentpageB());”我希望它切换到一个新片段。