android onitemclick()不工作....

时间:2014-07-26 16:15:54

标签: android listview onitemclick

我是Android编程的新手,所以请跟我一起轻松...

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

当用户点击listview中的名称时,它应该获取" fileName"数据库中包含与每个名称关联的Web服务器URL的字段。

目前,当点击列表视图项时,它会传输音频但是:

  • 它不会在模拟器上打开媒体播放器或流媒体播放器
  • 如果正在播放曲目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个曲目,如果用户启动另一个曲目则会停止现有曲目

感谢我收到的任何回复

2 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

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

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