【问题标题】:android onitemclick() not working....android onitemclick() 不工作....
【发布时间】:2014-07-26 16:15:54
【问题描述】:

我是 android 编程新手,所以请和我一起轻松...

我创建了一个应用程序,它有一个列表视图,其中包含从我使用 XAMPP 本地托管的数据库中的“名称”字段中获取的名称。

当用户单击列表视图中的名称时,它应该从包含与每个名称关联的网络服务器 URL 的数据库中获取“fileName”字段。

当前,当单击列表视图项时,它会流式传输音频 BUT:

  • 它不会在模拟器上打开媒体播放器或流媒体播放器
  • 如果正在播放曲目 1 并且我单击曲目 3,它将同时播放两个曲目
  • 由于没有媒体/流播放器视图,您无法暂停/停止/播放正在播放的曲目

这是我的代码

      private void connect() {

      List<String> r = new ArrayList<String>();

      ArrayAdapter<String>adapter=new ArrayAdapter<String>(getApplicationContext(), android.R.layout.simple_list_item_1,r);

      final ListView list=(ListView)findViewById(R.id.listView1);

      try {
            DefaultHttpClient client = new DefaultHttpClient();
            HttpGet request = new HttpGet("myServer/android/files.php");  
            HttpResponse response = client.execute(request);
            HttpEntity entity=response.getEntity();
            data=EntityUtils.toString(entity);
            Log.e("STRING", data);


      try {                            
           JSONObject jsonResponse = new JSONObject(data);
           JSONArray jsonMainNode = jsonResponse.optJSONArray("mp3s");

           for (int i = 0; i < jsonMainNode.length(); i++) {
            JSONObject jsonChildNode = jsonMainNode.getJSONObject(i);
            ID = jsonChildNode.getInt("ID");
            name = jsonChildNode.getString("Name");
            FileName  = Uri.parse(jsonChildNode.getString("FileName"));                           
            Log.e("STRING", name);
            //r.add(ID);
            r.add(name);


            list.setAdapter(adapter);   


            list.setOnItemClickListener(new OnItemClickListener() {
                public void onItemClick(AdapterView<?> parent, View view,int position, long id) {

                    MediaPlayer mp = new MediaPlayer();

                    try{
                    mp.setAudioStreamType(AudioManager.STREAM_MUSIC);
                    mp.setDataSource(getApplicationContext(), FileName);
                    mp.prepare();
                    mp.start();                 
                    }
                    catch(IOException e)
                    {
                        System.out.println(e);
                    }

                }
            });



           }


      } catch (JSONException e) {
       // TODO Auto-generated catch block
       e.printStackTrace();
      }

        } catch (ClientProtocolException e) {
            Log.d("HTTPCLIENT", e.getLocalizedMessage());
        } catch (IOException e) {
            Log.d("HTTPCLIENT", e.getLocalizedMessage());
        }                
    }

是我的 onItemClick() 中的代码有问题:

            list.setOnItemClickListener(new OnItemClickListener() {
                public void onItemClick(AdapterView<?> parent, View view,int position, long id) {

                    MediaPlayer mp = new MediaPlayer();

                    try{
                    mp.setAudioStreamType(AudioManager.STREAM_MUSIC);
                    mp.setDataSource(getApplicationContext(), FileName);
                    mp.prepare();
                    mp.start();                 
                    }
                    catch(IOException e)
                    {
                        System.out.println(e);
                    }

                }
            });

请您纠正我并帮助我:

  • 当我点击列表视图项时,流媒体播放器会打开并播放它
  • 它一次只播放一首曲目,如果用户开始另一首曲目,它会停止现有曲目

感谢我收到的任何回复

【问题讨论】:

  • 半回答:如果轨道 1 正在播放并且我点击轨道 3,它会同时播放两个轨道 - 您每次创建新的 MediaPlayer 时都会将 Mediaplayer 创建为全局变量

标签: android listview onitemclick


【解决方案1】:

为 Mp3 打开默认媒体播放器的代码:

Uri uri = Uri.parse("http://www.example.com/file.mp3");
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivty(intent);

至于您的第二个问题:您每次创建新的 MediaPlayer 时都将 Mediaplayer 创建为全局变量

【讨论】:

  • 感谢您的回复...您的代码是否进入了项目 click()?但是我的程序怎么会知道播放被点击的项目呢?请澄清谢谢
  • 因为您根据选择获取文件名并将其 Mp3 传递给 Uri.parse,它将使用默认媒体播放器打开文件.. 现在关于 MediaPlayer,如果您播放文件,它是唯一的回码想要构建 UI 取决于你想怎么做。
  • 在真实设备上它会打开默认播放器或让用户从设备上安装的播放器列表中选择
  • 非常感谢。我正在我的设备上进行测试。由于我从代码中传入的 URI,它要求用户从浏览器中选择播放文件。我需要它按照你说的“让用户从设备上的玩家列表中选择”请帮助我实现这一点....非常感谢
  • code 字符串扩展 = MimeTypeMap .getFileExtensionFromUrl(file);字符串 mimeType = MimeTypeMap.getSingleton() .getMimeTypeFromExtension(extension);意图 mediaIntent = new Intent(Intent.ACTION_VIEW); mediaIntent.setDataAndType(Uri.parse(file), mimeType);开始活动(媒体意图); code - 将我的代码更改为这个,它工作正常 :-) 无论如何感谢您的帮助
【解决方案2】:

您应该在将值添加到列表r 后将列表数据传递给适配器,而不是在开始添加此行

ArrayAdapter<String>adapter=new ArrayAdapter<String>(getApplicationContext(), android.R.layout.simple_list_item_1,r); after r.add

【讨论】:

  • 我现在的做法有什么不同??
猜你喜欢
  • 2014-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多