从自定义view中传值到activity,用textview显示,自定义view就不能刷新了。大半天时间了,求解决办法

在自定义View `MyView` 中,通过监听触摸事件并使用接口`MyViewListener`将滑动距离传递给`MainActivity`的`TextView`显示。然而遇到一个问题:值能正确显示但自定义View无法刷新内容。问题可能出在`postInvalidate()`调用上。寻求解决方案。
摘要由CSDN通过智能技术生成
public class MyView extends View {
       ...
      ...
      ...
        @Override
public boolean onTouchEvent(MotionEvent event) {
                   switch(event.getAction())
   {
                   case MotionEvent.ACTION_DOWN:
moveY = event.getY();
break;
   case MotionEvent.ACTION_MOVE:
if(!ismove)
{
ismove = true;
listener.onChanged(event.getY() - moveY);
moveY = event.getY();
ismove = false;
postInvalidate();
}
break;
   case MotionEvent.ACTION_UP:
break;
                   } 
                   return true;
        }

        private MyViewListener listener;

       public void setMyViewListener(MyViewListener listener)
       {
               this.listener = listener;
       }

       pub
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要实现从一个activity传值到另一个activity显示出来,可以通过以下步骤: 1. 在第一个activity,创建一个Intent对象,并使用putExtra()方法将要递的值存储在Intent。 2. 调用startActivity()方法启动第二个activity,并将Intent作为参数递。 3. 在第二个activity,使用getIntent()方法获取递过来的Intent对象,并使用getStringExtra()等方法获取递过来的值。 4. 将获取到的值显示在第二个activity的相应控件。 例如,可以在第一个activity这样递值: ``` Intent intent = new Intent(FirstActivity.this, SecondActivity.class); intent.putExtra("name", "张三"); intent.putExtra("age", 18); startActivity(intent); ``` 在第二个activity这样获取并显示值: ``` Intent intent = getIntent(); String name = intent.getStringExtra("name"); int age = intent.getIntExtra("age", ); TextView textView = findViewById(R.id.text_view); textView.setText("姓名:" + name + ",年龄:" + age); ``` ### 回答2: 在Android开发递数据是非常常见的操作,尤其是在不同Activity之间递数据。实现从一个Activity传值到另一个Activity显示出来的方法有多种,以下简述两种常用方法: 方法一:使用Intent递数据 步骤1:在发送方Activity,创建一个Intent对象并添加需要递的数据。 ```java Intent intent = new Intent(FirstActivity.this, SecondActivity.class); intent.putExtra("username", "张三"); //在Intent对象添加键值对数据 startActivity(intent); //启动SecondActivity ``` 步骤2:在接收方Activity,获取数据并进行处理。 ```java Bundle extras = getIntent().getExtras(); //获取递过来的Intent对象 if (extras != null) { String username = extras.getString("username"); //通过键名获取数据 textView.setText("你好"+ username); //将数据显示TextView } ``` 方法二:使用Bundle递数据 步骤1:在发送方Activity,创建一个Bundle对象,添加需要递的数据,并将Bundle对象添加到Intent对象。 ```java Intent intent = new Intent(FirstActivity.this, SecondActivity.class); Bundle bundle = new Bundle(); //创建Bundle对象 bundle.putString("username", "张三"); //在Bundle对象添加键值对数据 intent.putExtras(bundle); //将Bundle对象添加到Intent对象 startActivity(intent); //启动SecondActivity ``` 步骤2:在接收方Activity,获取Bundle对象并获取数据。 ```java Bundle bundle = getIntent().getExtras(); //获取递过来的Bundle对象 if (bundle != null) { String username = bundle.getString("username"); //通过键名获取数据 textView.setText("你好"+ username); //将数据显示TextView } ``` 无论是使用Intent递数据还是使用Bundle递数据,都需要注意以下几点: 1.递的数据需保证类型正确,否则在接收方会出现数据类型转换错误的异常。 2.递的数据需保证键名正确,否则在接收方会获取不到数据。 3.递的数据需保证在发送方和接收方的Activity都存在对应的TextView或其他控件,否则在显示数据时会报错。 ### 回答3: 在Android,我们可以通过Intent来实现activity之间的传值,Intent是一个用于在组件之间递消息的对象。通过intent,我们可以递基本数据类型、字符串、以及自定义对象等数据类型。 首先,在发送方的activity,我们需要创建一个Intent对象,然后通过putExtra()方法递需要递的值。putExtra()方法可以接受一个键值对,其键是一个字符串,值可以是基本数据类型或者自定义对象。例如: ``` Intent intent = new Intent(SenderActivity.this, ReceiverActivity.class); intent.putExtra("name", "张三"); intent.putExtra("age", 20); startActivity(intent); ``` 其,第一个参数是Context对象,第二个参数是目标activity的Class对象。通过putExtra()方法递了两个值,分别是"张三"和20。 在接收方的activity,我们可以通过getIntent()方法获取到递过来的Intent对象,然后通过getStringExtra()或者getIntExtra()等方法获取到我们所需要的值。例如: ``` Intent intent = getIntent(); String name = intent.getStringExtra("name"); int age = intent.getIntExtra("age", 0); ``` 其,getStringExtra()方法表示获取一个字符串类型的值,getIntExtra()方法表示获取一个整数类型的值。第二个参数是一个默认值,表示如果获取不到值,默认返回0。 最后,我们可以通过在接收方activity,将取到的值显示出来,例如: ``` TextView txtName = findViewById(R.id.txt_name); TextView txtAge = findViewById(R.id.txt_age); txtName.setText(name); txtAge.setText(String.valueOf(age)); ``` 以上就是将值从一个activity递到另一个activity显示出来的整个过程。通过这种方式,我们可以方便地在不同的activity之间递数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值