如何从自定义视图中调用片段

时间:2014-01-21 15:22:53

标签: android android-layout android-fragments android-view

DogActivity正在使用自定义视图。自定义视图处理一些逻辑,因此具有字段。当某个特定字段达到某个值时,我想启动一个父级为DogActivity的片段。我该怎么做?

建议在自定义视图中放置一个回调,以便调用其父活动吗?或者有更简单的方法吗?

2 个答案:

答案 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();
        }
    }

Activity

中接口的实现
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}}内附上这些听众。达到阈值后,使用onCreateDogActivity添加为FragmentTransaction中容器视图的子级。