提问者:小点点

将两个片段重构为一个片段


我创建了两个片段:'schedule fragment'和'clock 设置后

public class ClockFragment extends AppCompatActivity implements View.OnClickListener {
private int notificationId = 1;

在Mainactivity.java中,pageAdapter

        scheduleFragment = new ScheduleFragment();
    clockFragment = new ClockFragment();

    tabLayout.setupWithViewPager(viewPager);

    ViewPagerAdapter viewPagerAdapter = new ViewPagerAdapter(getSupportFragmentManager(), 0);
    viewPagerAdapter.addFragment(clockFragment, "Clock");
    viewPagerAdapter.addFragment(scheduleFragment, "Schedule");
    viewPager.setAdapter(viewPagerAdapter);

创建一个错误,声明我必须将clockFragment转换为scheduleFragment,以便创建一个片段。

我需要这两个片段,因为在ClockFragment(tab)中,时钟必须显示给用户,而在ScheduleFragment(tab)中,则显示用户的日程安排。 我不确定如何才能在不导致错误的情况下将两个选项卡分开。

如果您能解释一下为什么会出现这个错误,并给出解决方案,我们将非常感激。


共1个答案

匿名用户

首先,ClockFragment扩展了activity,这意味着它不是一个片段。

我给你举一个例子,说明你应该如何做事:

public class ChildFragment1 extends Fragment {

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    super.onCreateView(inflater, container, savedInstanceState);
    View rootView = inflater.inflate(R.layout.child_fragment_1_layout, container, false);
    Button buttonInFragment1 = rootView.findViewById(R.id.button_1);
    buttonInFragment1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Toast.makeText(getContext(), "button in fragment 1", Toast.LENGTH_SHORT).show();
        }
    });

    return rootView;
}
}

现在执行片段2:

public class ChildFragment2 extends Fragment {

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    super.onCreateView(inflater, container, savedInstanceState);
    View rootView = inflater.inflate(R.layout.child_fragment_1_layout, container, false);
    Button buttonInFragment1 = rootView.findViewById(R.id.button_1);
    buttonInFragment1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Toast.makeText(getContext(), "button in fragment 2", Toast.LENGTH_SHORT).show();
        }
    });

    return rootView;
}
}

现在为适配器添加一个新类:

public class ViewPagerAdapter extends FragmentPagerAdapter {

public ViewPagerAdapter(FragmentManager fm) {
    super(fm);
}

@Override
public Fragment getItem(int position) {
    switch (position)
    {
        case 0:
            return new ChildFragment1(); //ChildFragment1 at position 0
        case 1:
            return new ChildFragment2(); //ChildFragment2 at position 1

    }
    return null; //does not happen
}

@Override
public int getCount() {
    return 2; //three fragments
}
}

你的主要活动应该是这样的:

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    ViewPager viewPager = findViewById(R.id.view_pager);
    viewPager.setAdapter(new ViewPagerAdapter(getSupportFragmentManager()));
}
}