【问题标题】:How do I call a fragment from inside a custom view如何从自定义视图中调用片段
【发布时间】:2014-01-21 15:22:52
【问题描述】:

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

是否建议在自定义视图中放置回调以便调用其父活动?还是有更简单的方法?

【问题讨论】:

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


    【解决方案1】:

    在编程时,您应该始终寻求一致性,即环顾四周,看看是否完成了与您想做的事情相似的事情。 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();
            }
        }
    

    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 接口的源代码。他们应该给你很多思考

    【讨论】:

      【解决方案2】:

      字段的类型是什么?是EditText 吗? SeekBar?根据View,您将能够指定不同的侦听器/回调以确定它们何时更改以及它们是否已达到某个阈值。我会将这些听众附加在onCreateDogActivity 中。达到阈值时,使用FragmentTransaction 将您的Fragment 添加为DogActivity 中容器视图的子级。

      【讨论】:

      • 该字段是一个整数。
      • 我的意思是您用来捕获输入的类是什么,而不是正在输入的数据的类型。听起来像是 EditText..?
      • 我只是扩展视图。我将视图的画布用于许多绘图和动画。 int 字段在视图操作过程中递增。
      • 我将定义一个接口(即 CustomViewListener),其中包括您需要监听的方法/事件(即“onIntValueChanged”),然后在您的自定义类中定义一个公共方法以从您的 Activity 设置监听器(还将侦听器添加为自定义 View 类的成员)。并在特定字段发生更改时从视图中调用适当的方法。
      猜你喜欢
      • 1970-01-01
      • 2015-10-03
      • 1970-01-01
      • 1970-01-01
      • 2023-02-02
      • 2016-02-10
      • 1970-01-01
      • 1970-01-01
      • 2013-12-16
      相关资源
      最近更新 更多