【问题标题】:Android Studio How can I put this activity in extends Fragment?Android Studio 如何将此活动放在扩展片段中?
【发布时间】:2018-02-07 00:21:34
【问题描述】:

我在setContentViewfindViewByIdgetSupportFragmentManager() 遇到错误。该代码在扩展 AppCompatActivity 时运行良好,但是当我尝试将其更改为片段时,它会出现错误。我需要将 Activity 的这段代码转换为片段,以便我可以在navigationDrawer 中使用它。

import android.os.Bundle;
import android.support.design.widget.TabLayout;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.support.v7.app.AppCompatActivity;
import android.widget.FrameLayout;

public class PerdidosActivity extends Fragment {

    FrameLayout simpleFrameLayout;
    TabLayout tabLayout;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_perdidos);
        // get the reference of FrameLayout and TabLayout
        simpleFrameLayout = (FrameLayout) findViewById(R.id.simpleFrameLayout);
        tabLayout = (TabLayout) findViewById(R.id.simpleTabLayout);
        // Create a new Tab named "First"
        TabLayout.Tab firstTab = tabLayout.newTab();
        firstTab.setText("First"); // set the Text for the first Tab
        firstTab.setIcon(R.drawable.android_icon); // set an icon for the
        // first tab
        tabLayout.addTab(firstTab); // add  the tab at in the TabLayout
        // Create a new Tab named "Second"
        TabLayout.Tab secondTab = tabLayout.newTab();
        secondTab.setText("Second"); // set the Text for the second Tab
        secondTab.setIcon(R.drawable.android_icon); // set an icon for the second tab
        tabLayout.addTab(secondTab); // add  the tab  in the TabLayout



        // perform setOnTabSelectedListener event on TabLayout
        tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
            @Override
            public void onTabSelected(TabLayout.Tab tab) {
                // get the current selected tab's position and replace the fragment accordingly
                Fragment fragment = null;
                switch (tab.getPosition()) {
                    case 0:
                        fragment = new FirstFragment();
                        break;
                    case 1:
                        fragment = new SecondFragment();
                        break;

                }
                FragmentManager fm = getSupportFragmentManager();
                FragmentTransaction ft = fm.beginTransaction();
                ft.replace(R.id.simpleFrameLayout, fragment);
                ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
                ft.commit();
            }

            @Override
            public void onTabUnselected(TabLayout.Tab tab) {

            }

            @Override
            public void onTabReselected(TabLayout.Tab tab) {

            }
        });
    }
}

【问题讨论】:

    标签: android android-studio android-fragments fragment navigation-drawer


    【解决方案1】:

    setContentView()

    在 Activity 中,您可以通过覆盖 onCreate() 并调用 setContentView() 来创建 UI。在 Fragment 中,您以不同的方式进行操作。不要覆盖onCreate(),而是覆盖onCreateView(),然后编写如下内容:

    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View root = inflater.inflate(R.layout.my_layout, container, false);
        ...
        return root;
    }
    

    findViewById()

    在 Activity 中,您可以在任何地方简单地调用 findViewById(),它会在您发送给 setContentView() 的布局内搜索视图。在 Fragment 中,您需要一个 View 实例来调用 findViewById()

    onCreateView() 内部,您可以直接调用root.findViewById(R.id.my_view)。在其他方法中,只要你已经从onCreateView()返回了东西,你就可以写getView().findViewById(R.id.my_view)

    getSupportFragmentManager()

    这很简单:只需改用getFragmentManager()

    【讨论】:

      【解决方案2】:

      它将是public class PerdidosActivity extends AppCompatActivity,您的错误将消失。 说明:您正在扩展一个将要使用 TabLayout 的活动,并且您将使用适配器连接到 TabLayout 的视图将是片段而不是 PerdidosActivity。

      【讨论】:

      • thx 但我需要扩展片段,因为这必须在我的导航绘制中完成片段,否则不起作用
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-02
      相关资源
      最近更新 更多