DogActivity正在使用自定义视图。自定义视图处理一些逻辑,因此具有字段。当某个特定字段达到某个值时,我想启动一个父级为DogActivity的片段。我该怎么做?
建议在自定义视图中放置一个回调,以便调用其父活动吗?或者有更简单的方法吗?
答案 0 :(得分:2)
编程时,你应该始终寻找一致性,即环顾四周,看看你想做的事情与你想做的事情有多相似。 Android SDK大量使用回调侦听器,所以它们就是这里的方式。
事实上,我们甚至不需要知道您的View
到底是什么CustomView
,我们可以建立一个通用的解决方案。不要忘记根据您的具体环境进行调整/优化。一旦你到达所有View
被监听者发送垃圾邮件的地方,就考虑抽象和概括!
你需要3件事:
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
接口的源代码。他们应该给你足够的思考
答案 1 :(得分:0)
该领域的类型是什么?它是EditText
吗? SeekBar
?根据{{1}},您将能够指定不同的侦听器/回调以确定它们何时发生更改以及它们是否已达到特定阈值。我会在View
的{{1}}内附上这些听众。达到阈值后,使用onCreate
将DogActivity
添加为FragmentTransaction
中容器视图的子级。