Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/186.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android片段应用程序错误_Java_Android_Android Fragments - Fatal编程技术网

Java Android片段应用程序错误

Java Android片段应用程序错误,java,android,android-fragments,Java,Android,Android Fragments,我有一个日历应用程序,我正试图将它添加到选项卡操作栏中。但是当我把所有的代码连接在一起尝试完成这个应用程序时,我会遇到很多错误 原因:android.content.ActivityNotFoundException:找不到显式活动类 它告诉我,我应该尝试将其添加到android清单中,但由于它们是片段,您肯定不能将片段添加到android清单中,无论如何,这是我的代码 package com.idkstudios.shiftcalculator; import android.os.Bund

我有一个日历应用程序,我正试图将它添加到选项卡操作栏中。但是当我把所有的代码连接在一起尝试完成这个应用程序时,我会遇到很多错误

原因:android.content.ActivityNotFoundException:找不到显式活动类

它告诉我,我应该尝试将其添加到android清单中,但由于它们是片段,您肯定不能将片段添加到android清单中,无论如何,这是我的代码

package com.idkstudios.shiftcalculator;

import android.os.Bundle;
import android.support.v4.view.ViewPager;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;

import com.idkstudios.shiftcalculator.tab.TabsPagerAdapter;

public class MainActivity extends AppCompatActivity implements ActionBar.TabListener {

    private ViewPager viewPager;
    private TabsPagerAdapter adapter;
    private ActionBar actionBar;

    /**
     * Tab titles
     */
    private String[] tabTitles = {"Hours List", "Calendar", "Pay"};

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

        viewPager = (ViewPager) findViewById(R.id.pager);
        actionBar = getSupportActionBar();
        adapter = new TabsPagerAdapter(getSupportFragmentManager());

        viewPager.setAdapter(adapter);
        actionBar.setHomeButtonEnabled(false);
        actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

        /**
         * For adding tabs
         */
        for(String tabs : tabTitles){
            actionBar.addTab(actionBar.newTab().setText(tabs).setTabListener(this));
        }

        viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

            }

            @Override
            public void onPageSelected(int position) {
                actionBar.setSelectedNavigationItem(position);
            }

            @Override
            public void onPageScrollStateChanged(int state) {

            }
        });
    }

    @Override
    public void onTabSelected(ActionBar.Tab tab, android.support.v4.app.FragmentTransaction ft) {
        viewPager.setCurrentItem(tab.getPosition());
    }

    @Override
    public void onTabReselected(ActionBar.Tab tab, android.support.v4.app.FragmentTransaction ft) {

    }

    @Override
    public void onTabUnselected(ActionBar.Tab tab, android.support.v4.app.FragmentTransaction ft) {

    }
}
那是我的主要活动这是三个片段

package com.idkstudios.shiftcalculator.fragments;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.GridView;
import android.widget.ImageButton;
import android.widget.TextView;

import com.idkstudios.shiftcalculator.R;
import com.idkstudios.shiftcalculator.calendar.adapter.CalendarAdapter;
import com.idkstudios.shiftcalculator.calendar.util.CalendarCollection;

import java.util.GregorianCalendar;

/**
 * Created by Toby on 02/09/2015.
 */
public class CalendarFragment extends Fragment {

    /**
     * The basic variables that you will need for the calendar
     */
    public GregorianCalendar cal_month, cal_month_copy;
    private CalendarAdapter cal_adapter;
    private TextView tv_month;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        /**
         * Sets up the basic layout file, we return this later
         */
        View rootView = inflater.inflate(R.layout.fragment_calendar, container, false);

        cal_month = (GregorianCalendar) GregorianCalendar.getInstance();
        cal_month_copy = (GregorianCalendar) cal_month.clone();
        cal_adapter = new CalendarAdapter(getActivity(), cal_month, CalendarCollection.date_collection_arr);

        tv_month = (TextView) getActivity().findViewById(R.id.tv_month);
        tv_month.setText(android.text.format.DateFormat.format("MMMM yyyy", cal_month));

        ImageButton previous = (ImageButton) getActivity().findViewById(R.id.ib_prev);

        previous.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                setPreviousMonth();
                refreshCalendar();
            }
        });

        ImageButton next = (ImageButton) getActivity().findViewById(R.id.Ib_next);
        next.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                setNextMonth();
                refreshCalendar();

            }
        });


        GridView gridview = (GridView) getActivity().findViewById(R.id.gv_calendar);
        gridview.setAdapter(cal_adapter);
        gridview.setOnItemClickListener(new AdapterView.OnItemClickListener() {

            public void onItemClick(AdapterView<?> parent, View v,
                                    int position, long id) {

                ((CalendarAdapter) parent.getAdapter()).setSelected(v,position);
                String selectedGridDate = CalendarAdapter.day_string
                        .get(position);

                String[] separatedTime = selectedGridDate.split("-");
                String gridvalueString = separatedTime[2].replaceFirst("^0*","");
                int gridvalue = Integer.parseInt(gridvalueString);

                if ((gridvalue > 10) && (position < 8)) {
                    setPreviousMonth();
                    refreshCalendar();
                } else if ((gridvalue < 7) && (position > 28)) {
                    setNextMonth();
                    refreshCalendar();
                }
                ((CalendarAdapter) parent.getAdapter()).setSelected(v,position);


                ((CalendarAdapter) parent.getAdapter()).getPositionList(selectedGridDate, getActivity());
            }

        });

        return rootView;
    }

    protected void setNextMonth() {
        if (cal_month.get(GregorianCalendar.MONTH) == cal_month
                .getActualMaximum(GregorianCalendar.MONTH)) {
            cal_month.set((cal_month.get(GregorianCalendar.YEAR) + 1),
                    cal_month.getActualMinimum(GregorianCalendar.MONTH), 1);
        } else {
            cal_month.set(GregorianCalendar.MONTH,
                    cal_month.get(GregorianCalendar.MONTH) + 1);
        }

    }

    protected void setPreviousMonth() {
        if (cal_month.get(GregorianCalendar.MONTH) == cal_month
                .getActualMinimum(GregorianCalendar.MONTH)) {
            cal_month.set((cal_month.get(GregorianCalendar.YEAR) - 1),
                    cal_month.getActualMaximum(GregorianCalendar.MONTH), 1);
        } else {
            cal_month.set(GregorianCalendar.MONTH,
                    cal_month.get(GregorianCalendar.MONTH) - 1);
        }

    }

    public void refreshCalendar() {
        cal_adapter.refreshDays();
        cal_adapter.notifyDataSetChanged();
        tv_month.setText(android.text.format.DateFormat.format("MMMM yyyy", cal_month));
    }
}
这是android清单,如果你需要的话

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.idkstudios.shiftcalculator" >

    <application
        android:allowBackup="true"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>
我确实想过要有第二个计划。这三个片段都来自一个activity类,因此我将activity类中的代码复制并粘贴到片段中,因此这可能就是问题所在。我考虑过使用原始的acitivity类,然后开始从fragment类到activity类的新意图。那么,fragment类的意义何在呢。我不太确定这个主意一开始是否行得通

任何帮助都将不胜感激。如果您需要更多的代码,请告诉我,我会很乐意提供,无论是适配器还是xml代码


谢谢Toby。

HoursListFragment.onClick()有以下错误声明:

startActivity(new Intent(getActivity(), CalendarFragment.class));

正如您已经知道的,片段不是活动。您是想传递
MainActivity.class
而不是
CalendarFragment.class

HoursListFragment.onClick()
有以下错误声明:

startActivity(new Intent(getActivity(), CalendarFragment.class));

正如您已经知道的,片段不是活动。您是想传递
MainActivity.class
而不是
CalendarFragment.class

我想问题在于您的viewpager适配器, 您的MainActivity最好扩展FragmentActivity 因为你想使用碎片

然后在MainActivity类中定义如下三个字段

CalendarFragment calenderFragment = new CalendarFragment ();

HoursListFragment hourListFragment = new HoursListFragment ();

PayFragment payFragment = new PayFragment ();
private class MyAdapter extends FragmentStatePagerAdapter {
        @Override
        public CharSequence getPageTitle(int position) {
            switch (position) {
                case 0:
                    return tabTitles[0] ;
                case 1:
                    return tabTitles[1] ;
                default:
                    return tabTitles[2] ;
            }

        }


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


        @Override
        public Fragment getItem(int position) {

            switch (position) {
                case 0:
                    return calenderFragment;
                case 1:
                    return hourListFragment;
                case 2:
                    return payFragment;
                default:
                    return null;
            }

        }


        @Override
        public int getCount() {
            return NUM_PAGES;
        }
}
和一个整数作为_VIEWPAGER _页数 或更短的变量名,如NUM_PAGE

public static final int NUM_PAGES = 3;
并为视图寻呼机制作一个适配器,如下所示

CalendarFragment calenderFragment = new CalendarFragment ();

HoursListFragment hourListFragment = new HoursListFragment ();

PayFragment payFragment = new PayFragment ();
private class MyAdapter extends FragmentStatePagerAdapter {
        @Override
        public CharSequence getPageTitle(int position) {
            switch (position) {
                case 0:
                    return tabTitles[0] ;
                case 1:
                    return tabTitles[1] ;
                default:
                    return tabTitles[2] ;
            }

        }


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


        @Override
        public Fragment getItem(int position) {

            switch (position) {
                case 0:
                    return calenderFragment;
                case 1:
                    return hourListFragment;
                case 2:
                    return payFragment;
                default:
                    return null;
            }

        }


        @Override
        public int getCount() {
            return NUM_PAGES;
        }
}
最后将适配器设置到您的viewPager

viewPager.setAdapter(new MyAdapter(getSupportFragmentManager()));

我想问题是你的viewpager适配器, 您的MainActivity最好扩展FragmentActivity 因为你想使用碎片

然后在MainActivity类中定义如下三个字段

CalendarFragment calenderFragment = new CalendarFragment ();

HoursListFragment hourListFragment = new HoursListFragment ();

PayFragment payFragment = new PayFragment ();
private class MyAdapter extends FragmentStatePagerAdapter {
        @Override
        public CharSequence getPageTitle(int position) {
            switch (position) {
                case 0:
                    return tabTitles[0] ;
                case 1:
                    return tabTitles[1] ;
                default:
                    return tabTitles[2] ;
            }

        }


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


        @Override
        public Fragment getItem(int position) {

            switch (position) {
                case 0:
                    return calenderFragment;
                case 1:
                    return hourListFragment;
                case 2:
                    return payFragment;
                default:
                    return null;
            }

        }


        @Override
        public int getCount() {
            return NUM_PAGES;
        }
}
和一个整数作为_VIEWPAGER _页数 或更短的变量名,如NUM_PAGE

public static final int NUM_PAGES = 3;
并为视图寻呼机制作一个适配器,如下所示

CalendarFragment calenderFragment = new CalendarFragment ();

HoursListFragment hourListFragment = new HoursListFragment ();

PayFragment payFragment = new PayFragment ();
private class MyAdapter extends FragmentStatePagerAdapter {
        @Override
        public CharSequence getPageTitle(int position) {
            switch (position) {
                case 0:
                    return tabTitles[0] ;
                case 1:
                    return tabTitles[1] ;
                default:
                    return tabTitles[2] ;
            }

        }


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


        @Override
        public Fragment getItem(int position) {

            switch (position) {
                case 0:
                    return calenderFragment;
                case 1:
                    return hourListFragment;
                case 2:
                    return payFragment;
                default:
                    return null;
            }

        }


        @Override
        public int getCount() {
            return NUM_PAGES;
        }
}
最后将适配器设置到您的viewPager

viewPager.setAdapter(new MyAdapter(getSupportFragmentManager()));

是的,这个逻辑完美这个没有工作不幸的,我甚至删除了点击,仍然崩溃。是的,这个逻辑完美这个没有工作不幸的,我甚至删除了点击,仍然崩溃。对不起,我读了一个适配器类,我已经编辑了主帖子。对不起,我读到了一个适配器类,我已经编辑了主帖子。对不起,请提供完整的堆栈跟踪。应该找不到什么活动?此外,请提供启动该活动的源代码。请提供完整的堆栈跟踪。应该找不到什么活动?此外,请提供开始该活动的源代码。