List存储,contains方法不能正确判断Activity是否存在

I_was_a_novice 2015-07-22 10:11:12

public static List<Activity> activityList = new ArrayList<Activity>();//activity列表,统一关闭

/**
* 添加 Activity,统一关闭
*/
public static void addActivity(Activity activity){
if(!activityList.contains(activity)){
activityList.add(activity);
}
}


Activity 会一直向里面添加,存在的也添加
在网上找说要重写对象的equals方法


//这个写在AbcActivity里

@Override
public boolean equals(Object arg0) {
if (arg0 != null && arg0 instanceof AbcActivity) {
return this.equals((AbcActivity)arg0);
}
return false;
}


但是出错,不知道哪里的问题,求解决方法
...全文
313 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
github_neolau 2015-07-27
  • 打赏
  • 举报
回复
敢问楼主是在什么情况下需要这样写? set android:noHistory="true",这样activity就不需要关闭了。
JPF1024 2015-07-23
  • 打赏
  • 举报
回复
看了下Android的API里面Activity提供了这样一个方法: public int getTaskId() ——此Activity所在的Task的ID。这里给出Task的官方定义 :A task is a collection of activities that users interact with when 具体可参考API。
JPF1024 2015-07-23
  • 打赏
  • 举报
回复
建议楼主给每个Activity一个唯一值,用这个值去判断是否存在在List中,你这样去比对是不正确的。 Java中用法(自行转换成Android中的类.):


import java.util.ArrayList;
import java.util.List;


/**
 * 在这里完全是按照Java的方式模拟了一个Android的Activity的getTaskId()方法.
 * 在使用的使用,可以直接忽略Activity类,使用Android的Activity.
 *
 * @author puruidong
 * @version 2015-07-23
 */
class Activity {

    private int taskid;

    public Activity() {
        this.taskid = (int) (Math.random() * 100000);//在这里初始化值.
    }

    public int getTaskId() {
        return taskid;
    }


}

public class Main {


    public static void main(String[] args) {
        List<Integer> ints = new ArrayList<Integer>();
        Activity a = new Activity();
        Activity b = new Activity();
        Activity c = new Activity();
        ints.add(a.getTaskId());//你可以用this.getTaskId()
        ints.add(b.getTaskId());
        ints.add(c.getTaskId());
        /**********输出比对结果***********/
        System.out.println("比对:->a," + ints.contains(a.getTaskId()) + ";b," + ints.contains(b.getTaskId()) + ";c," + ints.contains(c.getTaskId()));


    }
}
运行结果: 比对:->a,true;b,true;c,true
Android之禅 2015-07-23
  • 打赏
  • 举报
回复
楼主以后建议对于类有关的方法可以查下api,我帮你看了java的api boolean contains(Object o)如果列表包含指定的元素,则返回 true。更确切地讲,当且仅当列表包含满足 (o==null ? e==null : o.equals(e)) 的元素 e 时才返回 true。 也就是说你应该自主写逻辑判断Activity是否相同。 希望能帮助你
I_was_a_novice 2015-07-23
  • 打赏
  • 举报
回复
开发者_android 2015-07-22
  • 打赏
  • 举报
回复
一般类型的判断最好用instanceof
源码AndroidStudioTemplate,利用它可以轻松创建一些常用的UI模版,使用说明:搜集整理的Android Studio 模版,首先你得要有Android Studio.将相应的文件夹复制到/plugins/android/lib/templates/目录,然后这些模版就会出现在菜单中。 包含两种模版 The templates folder contains these templates: SwipeRefreshLayout: 新建一个包含SwipeRefreshLayout的activity. Custom: 包含一些有用的常见模版 SwipeRefreshLayout 将SwipeRefreshLayout目录拷贝到Android Studio安装目录的/plugins/android/lib/templates/activities 重启Android Studio,New -> Activity -> SwipeRefreshLayout ,你就可以看到如下的效果: Screen Custom Copy the custom folder in your Android Studio installation in this folder: /plugins/android/lib/templates/ 将custom目录拷贝到Android Studio安装目录的/plugins/android/lib/templates/ 重启Android Studio, New -> xxxx 包含如下模版: Array Adapter: 创建一个带有ViewHolder的Array Adapter Array Adapter + Activity: 创建一个带有ViewHolder的Array Adapter和一个带有listactivity FloatingLabelLayout: 创建一个基于FloatingLabelLayout项目实现的Floating Label布局。 ( in: New -> Custom View) ForegroundLinearLayout: Creates a LinearLayout with foreground functionality where you can draw the stateful drawable on top. This template is base on ForegroundLinearLayout code by Chris Banes. ( in: New -> Custom View) Custom RecyclerView Adapter: Custom RecyclerView Adapter + Actiivty:

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧