我一直在搜索这个但不知道会发生什么......
当我回到之前的活动时,我的组件被正确初始化,但是他们有一个新的组件......
我的意思是,在调试模式下,我遵循并执行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背景放在按钮上)
由于声誉,无法发布图片,但请查看此处:
答案 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()
}