0

我已经准备了一个自定义视图并将它添加到一个活动中。现在根据我想更改活动的内容将在该视图上发生的事件。由于自定义视图类和活动类不同,我是无法处理它。请帮我解决这个问题。谢谢。

4

2 回答 2

0

如果您必须更新 Main_activity(包含视图)上的任何内容,那么您应该在自定义视图中创建一个 Main_activity 变量,如下所示:

private Main_activity activity;

然后你可以像这样在主要活动中调用任何函数update() :

this.activity.update();
于 2013-06-06T12:17:29.203 回答
0

为了构建具有两个自定义视图和来自主活动的自定义侦听器的应用程序:

我知道互联网上/整个 SO 上都有很多类似的帖子,但这一篇简单而完整。

您的活动课程:

public class MyActivity extends Activity{
  @Override
  protected void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);

    //initializing custom views
    MyCustomView1 myCustomView1 = new MyCustomView1(parameterList);
    MyCustomView2 myCustomView2 = new MyCustomView2(parameterList);

    //adding both custom views to the main activity
    mainView.addView(myCustomView1);
    mainView.addView(myCustomView1);

    //adding custom listener to the custom view 1
    myCustomView1.setCustomEventListener(new OnCustomEventListener() {

        @Override
        public void onEvent() {
            //firing an event of custom view 1
            Toast.makeText(MainActivity.this, "Touched custom view 1",
                    Toast.LENGTH_SHORT).show();
        }
    });

    //adding custom listener to the custom view 2
    myCustomView2.setCustomEventListener(new OnCustomEventListener() {

        @Override
        public void onEvent() {
            //firing an event of custom view 2
            Toast.makeText(MainActivity.this, "Touched custom view 2",
                    Toast.LENGTH_SHORT).show();
        }
    });
  }
}

您的 MyCustomView1 类:

public class MyCustomView1 extends LinearLayout{
  OnCustomEventListener myCustomEventListener;

  public MyCustomView1(ParameterList){
    super(ContextFromParameterList);
    //Just adding something to the custom view 1 in order to distinguish it on the screen
    TextView tv = new TextView(ContextFromParameterList);
    tv.setText("Hello world from custom view 1");
    addView(tv);

    this.setOnTouchListener(new OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {
            //delegating one event to another (delegating touch event to custom event)
            if (MyCustomView1.this.myCustomEventListener != null)
                MyCustomView1.this.myCustomEventListener.onEvent();
            return false;
        }
    });
  }

  public void setCustomEventListener(OnCustomEventListener eventListener) {
    //setting custom listener from activity
    myCustomEventListener = eventListener;
  }
}

您的 MyCustomView2 类:

public class MyCustomView2 extends LinearLayout {
OnCustomEventListener myCustomEventListener;

public MyCustomView2(ParameterList) {
    super(ContextFromParameterList);
    //Just adding something to the custom view 1 in order to distinguish it on the screen
    TextView tv = new TextView(ContextFromParameterList);
    tv.setText("Hello world from custom view 2");
    addView(tv);

    this.setOnTouchListener(new OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {
            //delegating one event to another (delegating touch event to custom event)
            if (MyCustomView2.this.myCustomEventListener != null)
                MyCustomView2.this.myCustomEventListener.onEvent();
            return false;
        }
    });
}

  public void setCustomEventListener(OnCustomEventListener eventListener) {
    //setting custom listener from activity
    myCustomEventListener = eventListener;
  }
}

您的侦听器界面:

public interface OnCustomEventListener{
  //interface defines one method. Can be more and methods may have parameters
  public void onEvent();
}

因此,您可以按照自己的方式进行操作,而不是像我在活动中那样显示祝酒词——隐藏一个视图,显示另一个视图,等等。

于 2013-06-06T18:41:14.513 回答