【问题标题】:onItemClick pass item id to intentonItemClick 将项目 ID 传递给意图
【发布时间】:2014-05-08 21:50:03
【问题描述】:

我从第一个意图打印出正确的 id,但没有正确发送第二个意图。

第一次点击项目的意图: (对于后来的观众,此问题已更新为正确答案):

    gridView.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> a, View v, int i, long l) {

            Intent intent = new Intent(videoChannelActivity.this,
                    PlayVideoActivity.class);
            intent.putExtra("videoId", l);
            System.out.println("video id intent1 = " + l);
            startActivity(intent);
        }
    });

日志:05-08 17:40:40.505: I/System.out(13938): video id intent 1: 2

第二次创作意图:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    final VideoView videoView;

    setContentView(R.layout.activity_play_video);

    Bundle extras;
    long videoLong;

    if (savedInstanceState == null) {
        extras = getIntent().getExtras();
        if (extras == null) {
            videoLong = 0;
        } else {
            videoLong = extras.getLong("videoId");
            System.out.println("video id intent 2 =  " + videoLong);
        }
    }

日志:05-08 17:46:19.166: I/System.out(14382): video id intent 2 = null

【问题讨论】:

  • 你放了很长时间并试图获取字符串...首先:P
  • 您在第一个活动中输入了一个 Long 并且您正在检索一个字符串。更改extras.getString(...
  • videoLong = (Long) null 这行不通,需要以不同的方式处理它,例如videoLong = 0;或者按照 Matej 的建议,使用 Long videoLong;,请记住,如果在 extras.getLong("videoId") 中找不到该值,它将返回 0,而不是 null。 developer.android.com/reference/android/os/…

标签: android android-intent onitemclick


【解决方案1】:

llong ...

的类型

所以你需要提取 long 而不是像 String 这样的

 videoLong = extras.getLong("videoId");

所以第二个意图的完整实现是

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    final VideoView videoView;

    setContentView(R.layout.activity_play_video);

    Bundle extras;
    Long videoLong;

    if (savedInstanceState == null) {
        extras = getIntent().getExtras();
        if (extras == null) {
            videoLong= null;
        } else {
            videoLong= extras.getLong("videoId");
            System.out.println("video id intent 2 =  " + videoLong);
        }
    }

【讨论】:

  • 没问题,Android 编程祝你好运:-)。如果您认为我的回答有帮助,请投票或将其标记为正确。非常感谢:)
  • videoLong= null long 不能为空,需要以其他方式处理
  • 是的,我忘了...原始数据类型不能为空,您需要使用包装类Long,答案已编辑:P ...
  • 如果 0 不是可接受的默认值,也可能需要考虑使用具有不同 defaultValue 的 developer.android.com/reference/android/os/…
【解决方案2】:

您将long 作为额外的传递,但试图将其读取为String.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-08
    • 1970-01-01
    • 1970-01-01
    • 2019-06-18
    • 2020-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多