组件重复onResume

时间:2013-03-22 20:31:57

标签: java android onresume

我一直在搜索这个但不知道会发生什么......

当我回到之前的活动时,我的组件被正确初始化,但是他们有一个新的组件......

我的意思是,在调试模式下,我遵循并执行onResume代码,编写文本并设置onCLicklisteners,但是一个空组件显示在好的组件之上,并且不知道为什么

当然,首次创建应用时,它运行正常!

任何想法?

相关代码:组件

public class TopLayout extends RelativeLayout {

  public static final int BTN_LEFT = 0;
  public static final int BTN_RIGHT = 1;
  public static final int LBL_TITLE = 2;
  protected Button btnLeft;
  protected Button btnRight;
  protected TextView lblTitle;

  public TopLayout(Context _context, AttributeSet _attrs) {
    super(_context, _attrs);
  }

  public TopLayout(Context _context) {
    super(_context);
  }

  public TopLayout(Context _context, AttributeSet _attrs, int _defStyle) {
    super(_context, _attrs, _defStyle);
  }

  public void initialize(){
    String infService = Context.LAYOUT_INFLATER_SERVICE;
    LayoutInflater li = (LayoutInflater) getContext().getSystemService(infService);
    li.inflate(R.layout.top_layout, this, true);

    btnLeft = (Button)findViewById(R.id.btnLeft);
    btnRight = (Button)findViewById(R.id.btnRight);
    lblTitle = (TextView)findViewById(R.id.lblTitle);
  }

  public void setText(int _element, String _text){
    switch (_element) {
    case BTN_LEFT:
        btnLeft.setText(_text);
        break;
    case BTN_RIGHT:
        btnRight.setText(_text);
        break;
    case LBL_TITLE:
        lblTitle.setText(_text);
        break;
    default:
        throw new RuntimeException("Unknown element to set Text: " + _text);
    }
  }

  public void hideButton(int _element){
    switch (_element) {
    case BTN_LEFT:
        btnLeft.setVisibility(Button.GONE);
        break;
    case BTN_RIGHT:
        btnRight.setVisibility(Button.GONE);
        break;
    default:
        throw new RuntimeException("Unknown button to hide: " + _element);
    }
  }

  public void setClickAction(int _element, OnClickListener _listener){
    switch (_element) {
    case BTN_LEFT:
        btnLeft.setOnClickListener(_listener);
        break;
    case BTN_RIGHT:
        btnRight.setOnClickListener(_listener);
        break;
    case LBL_TITLE:
        lblTitle.setOnClickListener(_listener);
        break;
    default:
        throw new RuntimeException("Unknown button to activate: " + _element);
    }
  }
}

我的活动的onResume:

topLyt = (TopLayout) findViewById(R.id.lytTop);
topLyt.initialize();
topLyt.setText(TopLayout.BTN_LEFT, res.getString(R.string.edit));
topLyt.setText(TopLayout.LBL_TITLE, res.getString(R.string.involved_people));
topLyt.setText(TopLayout.BTN_RIGHT, res.getString(R.string.add));

但问题是,第一次它工作,第二次我超过这第一个另一个未初始化的对象(它必须是另一个,因为调试时对象编号是相同的,我们可以看到前一个如果我把seethrough背景放在按钮上)

由于声誉,

无法发布图片,但请查看此处:

https://dl.dropbox.com/u/1668197/header.png

2 个答案:

答案 0 :(得分:1)

仅在视图构造函数中调用自定义视图的inititialize()方法,无需在活动的onResume()方法上调用它。

以下是关于Android平台的自定义视图的good read

答案 1 :(得分:1)

gpasci是对的,你在R.layout.top_layout方法中夸大了initialize()。因此,在任何onResume()上,您都会向TopLayout对象添加内容。 在onCreate中调用此代码,或者更好地按照gpasci的建议调用此代码,在构造函数中调用它。

  public TopLayout(Context _context, AttributeSet _attrs) {
    this(_context, _attrs, null);

  }

  public TopLayout(Context _context) {
    this(_context, null);
  }

  public TopLayout(Context _context, AttributeSet _attrs, int _defStyle) {
    super(_context, _attrs, _defStyle);
    initialize()
  }