如何在活动中进行回调

时间:2014-05-30 10:52:59

标签: android android-intent android-activity

我有3项活动

活动有一个按钮。点击那个按钮就会发生扫描(一个连续的访问),一段时间后它会回复一个onreceive方法。

开始接收回叫B活动。 B是singleTask实例。它显示了一个列表。

点击B中列表中的任何项目,然后C活动开始。{startactivity(Cintent)}

同时,当A再次回调时,由于连续扫描结果,它启动B活动,但由于B是单任务,因此不创建新实例并且它平滑地显示更新列表。 / p>

问题是,当用户在页面C中,并且A获得回调时,它触发B启动Activty并且B看到当前活动正在运行(检查活动管理器)为C,触发C,但是这次再次创建C (新实例发布)尽管C也是Singletask。

我不希望再次创建C,我想使用相同的旧实例。

A(主启动器) - > B(SingleTask) - > C(SingleTask)

**

  • 代码段

**

public class MainActivity extends Activity implements OnClickListener {

private Button connectButton;

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

    connectButton = (Button) findViewById(R.id.btn_Connect);
    connectButton.setOnClickListener(this);
    connectButton.setEnabled(true);
}


public void onClick(final View v) {
final Intent B = new Intent(context,B.class);
// start a specific job and wait for the callback 
}

// on receiving the call back result start activity of B
@Override
public void onReceive(final Context c, final Intent intent) {
startActivity(B);

   }
}

现在B活动会在开始时显示一个列表,当点击列表中的任何项目时,它会导航到C.

public class B extends Activity {
@Override
public void onCreate(Bundle saveInstanceState) {

    super.onCreate(saveInstanceState);
    setContentView(R.layout.B_list);
            final Context context = this;
    // Create Intent for C
    intentCList = new Intent(context,
            C.class);
     }
@SuppressWarnings("unchecked")
private void putintoListVIew(Intent intent) {

BList.setOnItemClickListener(new OnItemClickListener() {
  startactivity(intentCList);
  }
}

的AndroidManifest.xml

    <activity
        android:name="com.broadcom.wiced.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="com.broadcom.wiced.RouterListActivity"
        android:label="@string/app_name" 
         android:launchMode="singleTask">

    </activity>
      <activity
        android:name="com.broadcom.wiced.WicedListActivity"
        android:label="@string/app_name" 
        android:launchMode="singleTask">

    </activity>

2 个答案:

答案 0 :(得分:0)

您可以添加一个活动布尔标志isActive并将其设为true onResume和false onPause。 当活动A获得回调时,您可以检查它是否处于活动状态并决定是否需要运行B.

答案 1 :(得分:0)

将您的活动B和活动C设为singleTop。这种方式即使它们已经启动,相同的实例也将被放在首位。