Android 为什么在Tablayout中实现通信接口时不添加片段
我以前用的是有碎片的表格。当我使用activity中的接口调用片段时 我也无法访问Listview实例和getActivity(),这两个实例都产生空引用,我尝试了 使用isAdded方法进行测试时,从接口调用时不会添加片段本身 处方活动调用的处方历史片段Android 为什么在Tablayout中实现通信接口时不添加片段,android,android-studio,android-fragments,Android,Android Studio,Android Fragments,我以前用的是有碎片的表格。当我使用activity中的接口调用片段时 我也无法访问Listview实例和getActivity(),这两个实例都产生空引用,我尝试了 使用isAdded方法进行测试时,从接口调用时不会添加片段本身 处方活动调用的处方历史片段 ListView listView; CustomAdapter adapter; @Nullable @Override public View onCreateView(@NonNull LayoutInflater
ListView listView;
CustomAdapter adapter;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View retView = inflater.inflate(R.layout.fragment_history, container, false);
if (retView != null) {
listView = retView.findViewById(R.id.listView);
adapter = new CustomAdapter;
}
return retView;
}
private void setupViewPager(ViewPager viewPager) {
adapter = new ViewPagerAdapter(getSupportFragmentManager());
PrescriptionFragment prescriptionFragment = new PrescriptionFragment();
添加到活动中
片段中使用的Xml文件
处方\历史片段处方片段=新处方\历史片段()
adapter.addFragment(处方片段,“处方”);
adapter.addFragment(处方\历史片段,“历史”);
viewPager.setAdapter(适配器);
}
类ViewPagerAdapter扩展了FragmentPagerAdapter{
私有列表MFFragmentList=newArrayList();
私有最终列表MFFragmentTitleList=new ArrayList();
公共视图页面编辑器(碎片管理器){
高级经理;
}
@凌驾
公共片段getItem(int位置){
返回MFFragmentList.get(位置);
}
@凌驾
public int getCount(){
返回MFFragmentList.size();
}
public void addFragment(片段片段,字符串标题){
添加(片段);
MFFragmentTitleList.add(标题);
}
@凌驾
公共字符序列getPageTitle(int位置){
返回MFFragmentTitleList.get(位置);
}
public void removeFragment(片段片段,int位置){
MFFragmentList.移除(位置);
MFFragmentTitleList.移除(位置);
}
}
@凌驾
输入病人(int patientID)的公共无效信息{
处方\住院患者的历史片段(patientID);
}
上面没有与您的故事相匹配的代码,请尝试编写完整的代码,以便我们提供帮助。@Harpreet您需要哪些代码、活动、方法或片段的调用方式代码长度将取决于如何在活动中添加和调用片段。@Harpreet查看更新的代码上面没有与您的故事相匹配的代码,请尝试编写完整的代码,以便我们提供帮助。@Harpreet您需要哪些代码、活动、方法或片段的调用方式。代码长度将取决于如何在活动中添加和调用片段。@Harpreet查看更新的代码
@Override
public void onInputPatient(int patientID) {
Log.d("Patient", "onInputPatient: Recieved" + patientID );
if(isAdded()){
Log.d("Tag", "onInputPatient:Attached ");
}else {
Log.d("Tag", "onInputPatient: NotAdded"); // called
}
//accessing listview here also produces null reference error
listview.setAdapter(adapter);
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:context=".Activities.Activities.PrescriptionActivity">
<LinearLayout
android:id="@+id/history_id"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:context=".Activities.Activities.PrescriptionActivity"
>
<ListView
android:id="@+id/listView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="5dp"
android:visibility="visible"
android:nestedScrollingEnabled="true"
/>
</LinearLayout>
</LinearLayout>
private void setupViewPager(ViewPager viewPager) {
adapter = new ViewPagerAdapter(getSupportFragmentManager());
PrescriptionFragment prescriptionFragment = new PrescriptionFragment();
adapter.addFragment(prescriptionFragment, "PRESCRIPTION");
adapter.addFragment(prescription_historyFragment, "HISTORY");
viewPager.setAdapter(adapter);
}
class ViewPagerAdapter extends FragmentPagerAdapter {
private List<Fragment> mFragmentList = new ArrayList<>();
private final List<String> mFragmentTitleList = new ArrayList<>();
public ViewPagerAdapter(FragmentManager manager) {
super(manager);
}
@Override
public Fragment getItem(int position) {
return mFragmentList.get(position);
}
@Override
public int getCount() {
return mFragmentList.size();
}
public void addFragment(Fragment fragment, String title) {
mFragmentList.add(fragment);
mFragmentTitleList.add(title);
}
@Override
public CharSequence getPageTitle(int position) {
return mFragmentTitleList.get(position);
}
public void removeFragment(Fragment fragment, int position) {
mFragmentList.remove(position);
mFragmentTitleList.remove(position);
}
}
@Override
public void onInputPatient(int patientID) {
prescription_historyFragment.onInputPatient(patientID);
}