【发布时间】:2014-01-21 15:22:52
【问题描述】:
DogActivity 正在使用自定义视图。自定义视图处理一些逻辑,字段也是如此。当特定字段达到某个值时,我想启动一个其父为 DogActivity 的片段。我该怎么做?
是否建议在自定义视图中放置回调以便调用其父活动?还是有更简单的方法?
【问题讨论】:
标签: android android-layout android-fragments android-view
DogActivity 正在使用自定义视图。自定义视图处理一些逻辑,字段也是如此。当特定字段达到某个值时,我想启动一个其父为 DogActivity 的片段。我该怎么做?
是否建议在自定义视图中放置回调以便调用其父活动?还是有更简单的方法?
【问题讨论】:
标签: android android-layout android-fragments android-view
在编程时,您应该始终寻求一致性,即环顾四周,看看是否完成了与您想做的事情相似的事情。 Android SDK 大量使用回调监听器,所以它们是这里的路。
事实上,我们甚至不需要知道你的View 到底是什么类型的CustomView,我们可以构建一个通用的解决方案。但是,不要忘记根据您的特定环境进行调整/优化。一旦你的所有Views 都被听众发垃圾邮件,请考虑抽象和概括!
你需要三样东西:
public interface OnCountReachedListener {
public void onCountReached();
}
CustomView 中接受听众和提醒听众的地方
public class CustomView extends View {
private int theCount;
private OnCountReachedListener mListener;
public void setOnCountReachedListener(OnCountReachedListener listener) {
mListener = listener;
}
private void doSomething() {
while (theCount < 100) {
theCount++;
}
// The count is where we want it, alert the listener!
if (mListener != null) {
mListener.onCountReached();
}
}
public class DogActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
View myView = new CustomView();
myView.setOnCountReachedListener(new OnCountReachedListener() {
@Override
public void onCountReached() {
Log.w("tag", "COUNT REACHED!");
// START YOUR FRAGMENT TRANSACTION HERE
}
});
}
}
有关更多信息,请查看 Android SDK 中 View 类和所有 On**XY**Listener 接口的源代码。他们应该给你很多思考
【讨论】:
字段的类型是什么?是EditText 吗? SeekBar?根据View,您将能够指定不同的侦听器/回调以确定它们何时更改以及它们是否已达到某个阈值。我会将这些听众附加在onCreate 的DogActivity 中。达到阈值时,使用FragmentTransaction 将您的Fragment 添加为DogActivity 中容器视图的子级。
【讨论】: