1

我的新应用程序有一个大问题,我正在使用新的 ATD Plugin for Eclipse 提供的新 FragmentActivity。分步指南为我创建了包含 3 部分的主要 FragmentActivity。

这是代码:

package com.italiandevteam.chuck;

import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.Toast;


public class ChuckActivity extends FragmentActivity{


/**
 * The {@link android.support.v4.view.PagerAdapter} that will provide fragments for each of the
 * sections. We use a {@link android.support.v4.app.FragmentPagerAdapter} derivative, which will
 * keep every loaded fragment in memory. If this becomes too memory intensive, it may be best
 * to switch to a {@link android.support.v4.app.FragmentStatePagerAdapter}.
 */
SectionsPagerAdapter mSectionsPagerAdapter;

/**
 * The {@link ViewPager} that will host the section contents.
 */
ViewPager mViewPager;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_chuck);
    // Create the adapter that will return a fragment for each of the three primary sections
    // of the app.
    mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());



    // Set up the ViewPager with the sections adapter.
    mViewPager = (ViewPager) findViewById(R.id.pager);
    mViewPager.setAdapter(mSectionsPagerAdapter);


}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.activity_chuck, menu);
    return true;
}




/**
 * A {@link FragmentPagerAdapter} that returns a fragment corresponding to one of the primary
 * sections of the app.
 */
public class SectionsPagerAdapter extends FragmentPagerAdapter {

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

    @Override
    public Fragment getItem(int i) {
        Fragment fragment = new DummySectionFragment();
        Bundle args = new Bundle();
        args.putInt(DummySectionFragment.ARG_SECTION_NUMBER, i + 1);
        fragment.setArguments(args);
        return fragment;
    }

    @Override
    public int getCount() {
        return 3;
    }

    @Override
    public CharSequence getPageTitle(int position) {
        switch (position) {
            case 0: return getString(R.string.title_section1);
            case 1: return getString(R.string.title_section2);
            case 2: return getString(R.string.title_section3);
        }
        return null;
    }
}

/**
 * A dummy fragment representing a section of the app, but that simply displays dummy text.
 */
public static class DummySectionFragment extends Fragment {
    public DummySectionFragment() {
    }

    public static final String ARG_SECTION_NUMBER = "section_number";

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
                //Create the view
        }
}



}

我在我的开关中插入以onCreateView这种方式显示不同的布局:

switch(args.getInt(ARG_SECTION_NUMBER)){
                case 1:{
                     myView = getLayoutInflater(null).inflate(R.layout.layout_1, null);
                     break;
                }

                case 2:{
                    myView = getLayoutInflater(null).inflate(R.layout.layout_2, null);
                    break;
                }

            }
return myView

现在我真的需要将 admob 添加到我的项目中,但如果我把这个 coe 放在onCreate方法中

AdView adView;

        // Create the adView
        adView = new AdView(this, AdSize.BANNER, "a14eedc43db2122");

        // Lookup your LinearLayout assuming it’s been given
        // the attribute android:id="@+id/mainLayout"
        LinearLayout layout = (LinearLayout)findViewById(R.id.linearLayout);

        // Add the adView to it
        layout.addView(adView);

        AdRequest request = new AdRequest();
        request.addTestDevice(AdRequest.TEST_EMULATOR);
        request.addTestDevice("B7709F3C1336BFAEFAD6E50877E3211F");

        // Initiate a generic request to load it with an ad
        adView.loadAd(request);

我的应用程序将崩溃并且 logcat:

07-11 10:40:21.963: E/AndroidRuntime(4948): FATAL EXCEPTION: main
07-11 10:40:21.963: E/AndroidRuntime(4948): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.italiandevteam.chuck/com.italiandevteam.chuck.ChuckActivity}: java.lang.NullPointerException
07-11 10:40:21.963: E/AndroidRuntime(4948):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1768)
07-11 10:40:21.963: E/AndroidRuntime(4948):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1784)
07-11 10:40:21.963: E/AndroidRuntime(4948):     at android.app.ActivityThread.access$1500(ActivityThread.java:123)
07-11 10:40:21.963: E/AndroidRuntime(4948):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:939)
07-11 10:40:21.963: E/AndroidRuntime(4948):     at android.os.Handler.dispatchMessage(Handler.java:99)
07-11 10:40:21.963: E/AndroidRuntime(4948):     at android.os.Looper.loop(Looper.java:130)
07-11 10:40:21.963: E/AndroidRuntime(4948):     at android.app.ActivityThread.main(ActivityThread.java:3835)
07-11 10:40:21.963: E/AndroidRuntime(4948):     at java.lang.reflect.Method.invokeNative(Native Method)
07-11 10:40:21.963: E/AndroidRuntime(4948):     at java.lang.reflect.Method.invoke(Method.java:507)
07-11 10:40:21.963: E/AndroidRuntime(4948):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:847)
07-11 10:40:21.963: E/AndroidRuntime(4948):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:605)
07-11 10:40:21.963: E/AndroidRuntime(4948):     at dalvik.system.NativeStart.main(Native Method)
07-11 10:40:21.963: E/AndroidRuntime(4948): Caused by: java.lang.NullPointerException
07-11 10:40:21.963: E/AndroidRuntime(4948):     at com.italiandevteam.chuck.ChuckActivity.onCreate(ChuckActivity.java:66)
07-11 10:40:21.963: E/AndroidRuntime(4948):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
07-11 10:40:21.963: E/AndroidRuntime(4948):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1722)
07-11 10:40:21.963: E/AndroidRuntime(4948):     ... 11 more

我找不到在我的项目中插入 adMob 的方法,你能帮帮我吗?

编辑:

这是我的 activity_chuck.xml

<android.support.v4.view.ViewPager xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/pager"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".ChuckActivity">

    <!--
    This title strip will display the currently visible page title, as well as the page
    titles for adjacent pages.
    -->
    <android.support.v4.view.PagerTitleStrip android:id="@+id/pager_title_strip"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="top"
        android:background="#000"
        android:textColor="#fff"
        android:paddingTop="4dp"
        android:paddingBottom="4dp" />


</android.support.v4.view.ViewPager>

这是我的 layout_1(类似于 layout_2):

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#000000"
    android:orientation="vertical" >
    <LinearLayout
       android:id="@+id/linearLayout"
       android:orientation="vertical"
       android:layout_width="fill_parent"
       android:layout_height="wrap_content" 
       android:gravity="top"
     >
    </LinearLayout>
    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:src="@drawable/img_top" />

    <ScrollView
        android:id="@+id/scrollView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >
<TextView
    android:id="@+id/titolo_scheda"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="@string/biografia"
    android:gravity="center"
    android:textSize="22sp"
    >
    </TextView>
</ScrollView>
</LinearLayout>

编辑 2:现在使用开关中的 admob 代码,它可以工作,但仅适用于第一页,如果我滑动到第二部分,我就崩溃了,这是 LogCat:

07-11 14:51:27.117: E/AndroidRuntime(6282): FATAL EXCEPTION: main
07-11 14:51:27.117: E/AndroidRuntime(6282): java.lang.NullPointerException
07-11 14:51:27.117: E/AndroidRuntime(6282):     at com.italiandevteam.chuck.ChuckActivity$DummySectionFragment.onCreateView(ChuckActivity.java:139)
07-11 14:51:27.117: E/AndroidRuntime(6282):     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:871)
07-11 14:51:27.117: E/AndroidRuntime(6282):     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1083)
07-11 14:51:27.117: E/AndroidRuntime(6282):     at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:635)
07-11 14:51:27.117: E/AndroidRuntime(6282):     at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1431)
07-11 14:51:27.117: E/AndroidRuntime(6282):     at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:431)
07-11 14:51:27.117: E/AndroidRuntime(6282):     at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:141)
07-11 14:51:27.117: E/AndroidRuntime(6282):     at android.support.v4.view.ViewPager.populate(ViewPager.java:895)
07-11 14:51:27.117: E/AndroidRuntime(6282):     at android.support.v4.view.ViewPager.populate(ViewPager.java:772)
07-11 14:51:27.117: E/AndroidRuntime(6282):     at android.support.v4.view.ViewPager.completeScroll(ViewPager.java:1539)
07-11 14:51:27.117: E/AndroidRuntime(6282):     at android.support.v4.view.ViewPager.computeScroll(ViewPager.java:1422)
07-11 14:51:27.117: E/AndroidRuntime(6282):     at android.view.ViewGroup.drawChild(ViewGroup.java:1562)
07-11 14:51:27.117: E/AndroidRuntime(6282):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
07-11 14:51:27.117: E/AndroidRuntime(6282):     at android.view.ViewGroup.drawChild(ViewGroup.java:1644)
07-11 14:51:27.117: E/AndroidRuntime(6282):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
07-11 14:51:27.117: E/AndroidRuntime(6282):     at android.view.View.draw(View.java:6900)
07-11 14:51:27.117: E/AndroidRuntime(6282):     at android.widget.FrameLayout.draw(FrameLayout.java:357)
07-11 14:51:27.117: E/AndroidRuntime(6282):     at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:1908)
07-11 14:51:27.117: E/AndroidRuntime(6282):     at android.view.ViewRoot.draw(ViewRoot.java:1527)
07-11 14:51:27.117: E/AndroidRuntime(6282):     at android.view.ViewRoot.performTraversals(ViewRoot.java:1263)
07-11 14:51:27.117: E/AndroidRuntime(6282):     at android.view.ViewRoot.handleMessage(ViewRoot.java:1865)
07-11 14:51:27.117: E/AndroidRuntime(6282):     at android.os.Handler.dispatchMessage(Handler.java:99)
07-11 14:51:27.117: E/AndroidRuntime(6282):     at android.os.Looper.loop(Looper.java:130)
07-11 14:51:27.117: E/AndroidRuntime(6282):     at android.app.ActivityThread.main(ActivityThread.java:3835)
07-11 14:51:27.117: E/AndroidRuntime(6282):     at java.lang.reflect.Method.invokeNative(Native Method)
07-11 14:51:27.117: E/AndroidRuntime(6282):     at java.lang.reflect.Method.invoke(Method.java:507)
07-11 14:51:27.117: E/AndroidRuntime(6282):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:847)
07-11 14:51:27.117: E/AndroidRuntime(6282):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:605)
07-11 14:51:27.117: E/AndroidRuntime(6282):     at dalvik.system.NativeStart.main(Native Method)

我已经将 admob 的 xml LinearLayout 也放在了第二个布局中,这里 layout_2.xml

    <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#000000"
    android:orientation="vertical" >

    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:src="@drawable/img_top" />

    <ScrollView
        android:id="@+id/scrollView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >


    <TableLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >

        <TableRow
            android:id="@+id/tableRow1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:gravity="center_horizontal" >

            <ImageButton
                android:id="@+id/imageButton1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src="@drawable/bryce" />

            <ImageButton
                android:id="@+id/imageButton2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src="@drawable/beckman" />

        </TableRow>

        <TableRow
            android:id="@+id/tableRow2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" >
        </TableRow>

        <TableRow
            android:id="@+id/tableRow3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" >
        </TableRow>

        <TableRow
            android:id="@+id/tableRow4"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" >
        </TableRow>
    </TableLayout>

    </ScrollView>

      <LinearLayout
       android:id="@+id/linearLayout"
       android:orientation="vertical"
       android:layout_width="fill_parent"
       android:layout_height="wrap_content" 
       android:gravity="top"
     >
    </LinearLayout>
</LinearLayout>
4

1 回答 1

2

也发布您的布局 XML。

根据您的堆栈跟踪,findViewById(R.id.pager)返回null. 这意味着此 ID 未在activity_chuck.xml

于 2012-07-11T09:02:00.323 回答