我有一个FragmentActivity,它在第二个Tab上保存FragmentList . FragmentList实现了ListView和自定义Object的ArrayList .

然后,当用户想要构造新的列表项时,我会调用第二个活动;当用户在此次要活动中点击“Okay”时;它接受该活动的所有输入参数,并构造一个parcelable对象以传递回FragmentActivity(MainActivity) .

我的问题是:当我执行intent和startActivity时,我的主要活动的onNewIntent方法没有被调用 .

这是一些相关的代码:

我的Parcelable对象类:

package com.nanospark.upcdemo;

import android.os.Parcel;
import android.os.Parcelable;

public class listControlObject implements Parcelable {
    private String name;
    private int id;
    private int tempType;// 0 for fahrenheit, 1 for celsius.
    private int powerPercent;
    private int freq;
    private int temp;
    private int cycleDateDay;
    private int cycleDateMonth;
    private int numberOfCycles;
    private int cycleTimeHour;
    private int cycleTimeMinute;

    public listControlObject(String name, int id, int tempType,
        int powerPercent, int freq, int temp, int cycleTimeHour,
        int cycleTimeMinute, int cycleDateDay, int cycleDateMonth,
        int numberOfCycles) {
    this.id = id;
    this.name = name;
    this.cycleDateDay = cycleDateDay;
    this.cycleDateMonth = cycleDateMonth;
    this.cycleTimeHour = cycleTimeHour;
    this.cycleTimeMinute = cycleTimeMinute;
    this.freq = freq;
    this.numberOfCycles = numberOfCycles;
    this.powerPercent = powerPercent;
    this.temp = temp;
    this.tempType = tempType;

}

private listControlObject(Parcel in){
    this.id = in.readInt();
    this.name = in.readString();
    this.cycleDateDay = in.readInt();
    this.cycleDateMonth = in.readInt();
    this.cycleTimeHour = in.readInt();
    this.cycleTimeMinute = in.readInt();
    this.freq = in.readInt();
    this.numberOfCycles = in.readInt();
    this.powerPercent = in.readInt();
    this.temp = in.readInt();
    this.tempType = in.readInt();

}

    public int getCycleDateDay() {
        return cycleDateDay;
    }

    public void setCycleDateDay(int cycleDateDay) {
        this.cycleDateDay = cycleDateDay;
    }

    public int getCycleDateMonth() {
        return cycleDateMonth;
    }

    public void setCycleDateMonth(int cycleDateMonth) {
        this.cycleDateMonth = cycleDateMonth;
    }

    public int getCycleTimeHour() {
        return cycleTimeHour;
    }

    public void setCycleTimeHour(int cycleTimeHour) {
        this.cycleTimeHour = cycleTimeHour;
    }

    public int getCycleTimeMinute() {
        return cycleTimeMinute;
    }

    public void setCycleTimeMinute(int cycleTimeMinute) {
        this.cycleTimeMinute = cycleTimeMinute;
    }

    public int getNumberOfCycles() {
        return numberOfCycles;
    }

    public void setNumberOfCycles(int numberOfCycles) {
        this.numberOfCycles = numberOfCycles;
    }

    public int getTempType() {
        return tempType;
    }

    public void setTempType(int tempType) {
        this.tempType = tempType;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getPowerPercent() {
        return powerPercent;
    }

    public void setPowerPercent(int powerPercent) {
        this.powerPercent = powerPercent;
    }

    public int getFreq() {
        return freq;
    }

    public void setFreq(int freq) {
        this.freq = freq;
    }

    public int getTemp() {
        return temp;
    }

    public void setTemp(int temp) {
        this.temp = temp;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    @Override
    public String toString() {

        return this.name;
    }

    @Override
    public int describeContents() {
        // TODO Auto-generated method stub
        return 0;
    }

    @Override
    public void writeToParcel(Parcel parcel, int flags) {
        parcel.writeInt(id);
        parcel.writeString(name);
        parcel.writeInt(cycleDateDay);
        parcel.writeInt(cycleDateMonth);
        parcel.writeInt(cycleTimeHour);
        parcel.writeInt(cycleTimeMinute);
        parcel.writeInt(freq);
        parcel.writeInt(numberOfCycles);
        parcel.writeInt(powerPercent);
        parcel.writeInt(temp);
        parcel.writeInt(tempType);

    }
    public static Creator<listControlObject> CREATOR = new Creator<listControlObject>() {
        public listControlObject createFromParcel(Parcel parcel) {
            return new listControlObject(parcel);
        }

        public listControlObject[] newArray(int size) {
            return new listControlObject[size];
        }
    };

}

主要FragmentActivity类:

公共类MainActivity扩展FragmentActivity实现ActionBar.TabListener {String TAG;

HomeFragment homeFragment;
cycleviewfragment cyclefragment;

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

    // Set up the action bar.
    final ActionBar actionBar = getActionBar();
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

    homeFragment = new HomeFragment();
    cyclefragment = new cycleviewfragment();

     processNewIntent(getIntent());


}
@Override
protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);
    processNewIntent(intent);
}

private void processNewIntent(Intent intent) {
    if (intent.hasExtra("custom_object")) {
        cyclefragment.a1.add((listControlObject) intent.getParcelableExtra("custom object"));
        cyclefragment.adapter.notifyDataSetChanged();
    }
}

我的ListFragment类:

package com.nanospark.upcdemo;

import java.util.ArrayList;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.ListFragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;

public class cycleviewfragment extends ListFragment {
    View cycleviewfragment;
    ListView cyclelist;
    ArrayList<listControlObject> a1;
    ArrayAdapter<listControlObject> adapter;
    Button addButton;
    Context context;

    public View onCreateView(LayoutInflater viewInflation, ViewGroup container,
            Bundle SavedInstantState) {

        cycleviewfragment = viewInflation.inflate(
                R.layout.cycleviewfragment_page, container, false);
        context = getActivity().getApplicationContext();
        a1 = new ArrayList<listControlObject>();

        adapter = new ArrayAdapter<listControlObject>(getActivity()
                .getBaseContext(), android.R.layout.simple_list_item_1, a1);
        this.setListAdapter(adapter);

        addButton = (Button) cycleviewfragment.findViewById(R.id.addbutton);

        addButton.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                Intent myIntent = new Intent(getActivity(),
                        listaddactivity.class);
                myIntent.putExtra("Array", a1); // Optional parameters
                getActivity().startActivity(myIntent);
            }

        });
        return cycleviewfragment;
    }

    public ListView getCyclelist() {
        return cyclelist;
    }

    public void setCyclelist(ListView cyclelist) {
        this.cyclelist = cyclelist;
    }

    public ArrayList<listControlObject> getA1() {
        return a1;
    }

    public void setA1(ArrayList<listControlObject> a1) {
        this.a1 = a1;
    }
}

添加调试日志后

private void processNewIntent(Intent intent) {
        if (intent.hasExtra("custom_object")) {
            cyclefragment.a1.add((listControlObject) intent.getParcelableExtra("custom object"));
            cyclefragment.adapter.notifyDataSetChanged();
            if(!intent.getParcelableArrayExtra("custom object").equals(null)){
            Log.d("TEST MESSAGE", "The intent parcelables are not null");
            }
        }
    }

The log message never appears. So I'm assuming that my getParcelableArrayExtra is null? Edit: After adding several logs it appears my MainActivity's onNewIntent(Intent intent) and processNewIntent(Intent intent) are never being called; why would this be? Especially if I explicitly call it in the onCreate method?

编辑二:

研究显示发布清单可能有所帮助,所以这里是:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.nanospark.upcdemo"
    android:versionCode="1"
    android:versionName="1.0"
     >

    <uses-sdk
        android:minSdkVersion="16"
        android:targetSdkVersion="18" />

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

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
          <activity
            android:name=".listaddactivity"
            android:label="@string/app_name"
            android:screenOrientation="landscape" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

我甚至尝试将android:launchMode =“singleTop”添加到我的清单活动中,但它仍然没有按照我的日志调用onNewIntent方法 .

编辑:

我可以显式添加一个listControlObject然后出现我的ListView;但是仍然不能用对象的parcelable做onNewIntent方法 .

解决方案:

问题解决了 - 我需要做的就是修复我在这里错误实现的密钥:

if (intent.hasExtra("custom_object"))

应该:

if (intent.hasExtra("custom object"))