Fragment内的TabLayout(App已停止)

时间:2018-04-20 20:49:24

标签: java android xml android-fragments layout

我在我的Home Fragment中创建一个TabLayout,它是底部NavBar的一部分。 我已经完成了我所知道的一切,以便找出为什么一旦我导航到家而又没有线索,应用程序停止工作....

我已经调试并清理了应用,但一切都很成功,没有检测到错误..

这里有我的代码,有人可以提供帮助:我有两个标签1- Landmark 2- Events,每个标签也是一个片段。

HomeFragemnt.java

package com.example.assus.wijhah0;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.design.widget.AppBarLayout;
import android.support.design.widget.BottomNavigationView;
import android.support.design.widget.TabLayout;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.view.ViewPager;
import android.view.LayoutInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;

public class HomeFragment extends Fragment {

private TabLayout tabLayout;
private AppBarLayout appBarLayout;
private ViewPager viewPager;


public HomeFragment() {
    // Required empty public constructor
}


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {


    View v = inflater.inflate(R.layout.fragment_home, container, false);

    tabLayout = v.findViewById(R.id.tablayout_id);
    appBarLayout = v.findViewById(R.id.tablayout_id);
    viewPager = v.findViewById(R.id.viewpager_id);
    ViewPagerAdapter adapter = new ViewPagerAdapter(getFragmentManager());

    //adding fragments
    adapter.AddFragment( new LandmarkFragment(), "Landmark");
    adapter.AddFragment(new EventsFragment(), "Events");


    //adapter set up
    viewPager.setAdapter(adapter);
    tabLayout.setupWithViewPager(viewPager);

    // Inflate the layout for this fragment
    return v;
}}

fragment_home.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    tools:context=".HomeFragment"
    android:orientation="vertical">

<android.support.design.widget.AppBarLayout
    android:layout_width="match_parent"
    android:layout_height="200dp"
    android:gravity="center"
    app:elevation="0dp"
    android:id="@+id/appbarid">

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:padding="10dp"
        android:src="@drawable/travel"/>
</android.support.design.widget.AppBarLayout>

<android.support.design.widget.TabLayout
    android:id="@+id/tablayout_id"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@color/colorPrimary"
    app:tabGravity="fill"
    app:tabIndicatorColor="@color/color1"
    app:tabMode="fixed"
    app:tabTextColor="@color/white">
</android.support.design.widget.TabLayout>

<android.support.v4.view.ViewPager
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/viewpager_id"></android.support.v4.view.ViewPager>

</LinearLayout>

ViewPageAdapter.java

   import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;

import java.util.ArrayList;
import java.util.List;

public class ViewPagerAdapter extends FragmentPagerAdapter{

private final List<Fragment> fragmentList = new ArrayList<>();
private final List<String> FragmentListTitles = new ArrayList<>();

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

@Override
public Fragment getItem(int position) {
    return fragmentList.get(position);
}

@Override
public int getCount() {
    return FragmentListTitles.size();
}

public CharSequence getPageTitle(int position) {
    return FragmentListTitles.get(position);
} //end CharSequence



   public void AddFragment( Fragment fragment, String Title) {
        fragmentList.add(fragment);
        FragmentListTitles.add(Title);
    } // end Addfragment


} //end class

1 个答案:

答案 0 :(得分:0)

见这里

public class DnDTreeCell extends TreeCell<String> {

    public DnDTreeCell() {

        // ON SOURCE NODE.
        setOnDragDetected(new EventHandler<MouseEvent>() {
            @Override
            public void handle(MouseEvent event) {
                TreeItem<String> item = getTreeItem();
                if (isEmpty() || item == null || item.getParent() == null) {
                    return; // don't start drag on empty cell or root cell
                }
                Dragboard dragBoard = startDragAndDrop(TransferMode.MOVE);
                ClipboardContent content = new ClipboardContent();
                content.put(DataFormat.PLAIN_TEXT, item.getValue());
                dragBoard.setContent(content);
                event.consume();
            }
        });
        setOnDragDone(new EventHandler<DragEvent>() {
            @Override
            public void handle(DragEvent dragEvent) {
                dragEvent.consume();
            }
        });
        setOnDragOver(new EventHandler<DragEvent>() {
            @Override
            public void handle(DragEvent dragEvent) {
                if (!(dragEvent.getGestureSource() instanceof TreeCell)
                        || ((TreeCell) dragEvent.getGestureSource()).getTreeView() != getTreeView()) {
                    return; // only allow dragging from this TreeView
                }
                TreeItem<String> sourceItem = ((TreeCell<String>) dragEvent.getGestureSource()).getTreeItem();

                // prevent item from being added to own subtree
                TreeItem<String> item = getTreeItem();
                while (item != null && item != sourceItem) {
                    item = item.getParent(); // go up through the tree until dragged item or root is found
                }
                if (item == null) {
                    // We accept the transfer!!!!!
                    dragEvent.acceptTransferModes(TransferMode.MOVE);
                }
                dragEvent.consume();
            }
        });
        setOnDragDropped(new EventHandler<DragEvent>() {
            @Override
            public void handle(DragEvent dragEvent) {
                TreeItem<String> itemToMove = ((TreeCell<String>) dragEvent.getGestureSource()).getTreeItem();
                TreeItem<String> newParent = getTreeItem();
                // Remove from former parent.
                itemToMove.getParent().getChildren().remove(itemToMove);
                // Add to new parent.
                newParent.getChildren().add(itemToMove);
                newParent.setExpanded(true);
                dragEvent.setDropCompleted(true);
                dragEvent.consume();
            }
        });
    }

    @Override
    protected void updateItem(String item, boolean empty) {
        System.out.format("\nupdateItem - [%s]\n", item);
        super.updateItem(item, empty);
        setText(item == null ? "" : item);
    }
}

更改:

tabLayout = v.findViewById(R.id.tablayout_id); appBarLayout = v.findViewById(R.id.tablayout_id);

Fot this:

tabLayout = v.findViewById(R.id.tablayout_id); appBarLayout = v.findViewById(R.id.appbarid);

这是更好的

@Override public int getCount() { return FragmentListTitles.size(); }