我的应用不断崩溃。我正在尝试创建标签swype导航设置。这是我的代码。
适配器类
package tabsswipe.adapter;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
//import fragments
import edu.wmich.lab4_jjohns1119.MainFragment;
//import edu.wmich.tabswithswipe.PostFragment;
//import edu.wmich.tabswithswipe.SuggestFragment;
public class TabsPagerAdapter extends FragmentPagerAdapter {
public TabsPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int index) {
switch (index) {
case 0:
// Main fragment activity
return new MainFragment();
case 1:
// Suggest fragment activity
//return new SuggestFragment();
case 2:
// Post fragment activity
//return new PostFragment();
}
return null;
}
@Override
public int getCount() {
// get item count - equal to number of tabs
return 3;
}
}
主要活动
package edu.wmich.lab4_jjohns1119;
import tabsswipe.adapter.TabsPagerAdapter;
import android.app.ActionBar.Tab;
import android.app.ActionBar.TabListener;
import android.app.ActionBar;
import android.app.FragmentTransaction;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.support.v4.view.ViewPager;
public class MainActivity extends FragmentActivity implements TabListener {
private ViewPager viewPager;
private TabsPagerAdapter mAdapter;
private ActionBar actionBar;
//tab titles
private String[] tabs = {"Main", "Photo", "Share"};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//initialization
viewPager = (ViewPager)findViewById(R.id.container);
actionBar = getActionBar();
mAdapter = new TabsPagerAdapter(getSupportFragmentManager());
viewPager.setAdapter(mAdapter);
actionBar.setHomeButtonEnabled(false);
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
//adding the tabs to the action bar
for(String tab_name : tabs) {
actionBar.addTab(actionBar.newTab().setText(tab_name)
.setTabListener(this));
}
//on viewpager swiping, make the respective tab selected
viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageSelected(int position) {
// TODO Auto-generated method stub
//on changing the page, make tab selected
actionBar.setSelectedNavigationItem(position);
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
// TODO Auto-generated method stub
}
@Override
public void onPageScrollStateChanged(int arg0) {
// TODO Auto-generated method stub
}
});
}
@Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
// TODO Auto-generated method stub
viewPager.setCurrentItem(tab.getPosition());
}
@Override
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
// TODO Auto-generated method stub
}
@Override
public void onTabReselected(Tab tab, FragmentTransaction ft) {
// TODO Auto-generated method stub
}
}
主要片段
package edu.wmich.lab4_jjohns1119;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
public class MainFragment extends Fragment {
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_main, container,false);
return rootView;
}
}
清单
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="edu.wmich.lab4_jjohns1119"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="14"
android:targetSdkVersion="19" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="edu.wmich.lab4_jjohns1119.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>
<activity
android:name = "edu.wmich.lab4_jjohns1119.MainFragment"
android:label = "@string/main_fragment_name">
</activity>
</application>
目标是添加更多标签,以便我可以轻松在片段之间导航。看起来我只是有一个投射错误,但对我来说没有任何错误。有人可以帮忙吗?
编辑:这是我的主要XML
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="edu.wmich.lab4_jjohns1119.MainActivity"
tools:ignore="MergeRootFrame" />
片段XML
<RelativeLayout 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" >
答案 0 :(得分:3)
你可以发布你的xml布局文件吗?还有堆栈跟踪?
如果我不得不猜测我会说仔细检查您的容器R.id.container
是否在布局文件中声明为ViewPager
。
编辑:发表评论后
在你的java代码中你使用'viewPager =(ViewPager)findViewById(R.id.container);' 这意味着您尝试将名为'container'的元素转换为viewPager。
但是在你的xml文件中,名为container的元素是'FrameLayout'。
如果要使用ViewPage,则需要更改布局,而不是:
<FrameLayout xmlns:android="schemas.android.com/apk/res/android"; xmlns:tools="schemas.android.com/tools"; android:id="@+id/container" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="edu.wmich.lab4_jjohns1119.MainActivity" tools:ignore="MergeRootFrame" />
你需要:
<FrameLayout xmlns:android="schemas.android.com/apk/res/android"
xmlns:tools="schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="edu.wmich.lab4_jjohns1119.MainActivity"
tools:ignore="MergeRootFrame" >
<android.support.v4.view.ViewPager
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
</FrameLayout>
或者,如果您确实想使用FrameLayout,则需要更改演员表。而不是:
viewPager = (ViewPager)findViewById(R.id.container);
使用
FrameLayout layout = (FrameLayout)findViewById(R.id.container);
答案 1 :(得分:1)
正如你被告知的那样,你可能犯了一个错误而没有宣称R.id.container
是一个ViewPager,但是如果一切正确的话,试着做Project->clean
有时IDE就会混淆并弄乱一些id,特别是如果你一直复制粘贴xml代码
答案 2 :(得分:0)
我会说你的空指针的问题在于你的切换。确保你有一个名为'MainFragment'的片段,添加break
并添加default:
,否则你的开关将返回null。
public Fragment getItem(int index) {
switch (index) {
case 0:
// Main fragment activity
return new MainFragment();
break;
case 1:
return new MainFragment();
break;
case 2:
return new MainFragment();
break;
default:
return new MainFragment();
break;
}
return null;