Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/221.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android listitem中TextView的setBackgroundResource_Android - Fatal编程技术网

Android listitem中TextView的setBackgroundResource

Android listitem中TextView的setBackgroundResource,android,Android,我有一个活动,显示歌曲曲目的列表视图。单击某个项目时,它会流式传输相应的媒体文件。我在每一行都有一个文本视图,显示曲目的长度。播放曲目时,我将行中textview的backgroundresource切换到可绘制的暂停按钮。换句话说,当它准备播放时,它会显示一个播放按钮,当它当前播放时,它会显示一个暂停按钮。很简单 目前,我正在这样做,以便在播放mediaplayer时设置drawable to pause按钮: if(mp.isPlaying()){ _player.setBackground

我有一个活动,显示歌曲曲目的列表视图。单击某个项目时,它会流式传输相应的媒体文件。我在每一行都有一个文本视图,显示曲目的长度。播放曲目时,我将行中
textview
backgroundresource
切换到可绘制的暂停按钮。换句话说,当它准备播放时,它会显示一个播放按钮,当它当前播放时,它会显示一个暂停按钮。很简单

目前,我正在这样做,以便在播放
mediaplayer
时设置drawable to pause按钮:

if(mp.isPlaying()){
_player.setBackgroundResource(R.drawable.pausebtn);
_player.setText(“:”+String.valueOf(mp.getDuration()/1000));

我在Runnable中这样做,它有
mediaplayer
回调
onPrepared

问题是,我需要在该列表项中设置drawable,即已单击且正在播放其曲目的曲目。如何抓住已单击的曲目并将其textview设置为新的drawable

以下是完整的代码:

package com.me.player

import java.net.URL;
import java.util.ArrayList;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
import android.content.Context;
import android.graphics.Color;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnCompletionListener;
import android.media.MediaPlayer.OnErrorListener;
import android.media.MediaPlayer.OnPreparedListener;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.AdapterView.OnItemClickListener;
import com.mtv.datahandler.Artist;
import com.mtv.datahandler.DataBaseHelper;
import com.mtv.datahandler.Track;
import com.mycompany.http.HttpRequest;


public class ArtistAudio extends ControllerActivity implements OnCompletionListener, OnPreparedListener, OnErrorListener{

    private int METHOD_TYPE = 0;
    private static final int GET_AUDIO = 1;

    int CURRENT_POSITION = 0;
    int DURATION = 0;

    public static final String AUDIO_FEED_URL = "http://direct.rhapsody.com/metadata/data/getTopTracksForArtist.xml?blabla";
    public static final int MAX_TRACKS = 200;
    ArrayList<Track> tracks = new ArrayList<Track>();
    Artist artist;

    private MediaPlayer mp;
    private int mSongPlaying = 0;
    TextView _player;

    @Override
    protected void progressRunnableComplete() {
        if(isFinishing()){
            return;
        }
        if(METHOD_TYPE == GET_AUDIO){
            setList();
        }
    }

    public void setList(){
        ListView listview = (ListView)findViewById(R.id.ListView01);
        //      ListView listview = (ListView)findViewById(R.id.ListView01);
        if(listview == null){
            setContent(R.layout.artistaudio);
            listview = (ListView)findViewById(R.id.ListView01);
        }

        //      listview.addHeaderView();
        listview.setCacheColorHint(0);
        listview.setAdapter(new TrackListAdapter());
        listview.setSelector(R.drawable.listbackground);
        listview.setDividerHeight(1);
        listview.setDivider(getResources().getDrawable(R.drawable.img_dotted_line_horz));
        listview.setOnItemClickListener(new OnItemClickListener(){
            @Override
            public void onItemClick(AdapterView<?> arg0, View arg1,
                    int arg2, long arg3) {
                // TODO Auto-generated method stub
                TrackClicked(arg2);
            }
        });
    }

    public void TrackClicked(int arg2){



        mSongPlaying = arg2;


        Track track = tracks.get(arg2);
        String url = track.requestInfo("previewURL");

        mHandler.post(new PlaySong(url));









//      mHandler.post(new PlaySong("http://dc237.4shared.com/img/315443275/33f14ef2/dlink__2Fdownload_2F9y5VGjVt_3Ftsid_3D20100705-131850-40aa0b87/preview.mp3"));
    }

    public void setDuration(int n) {
        DURATION = n;

    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setTitle("Audio Clips");
        setContent(R.layout.artistaudio);

        Object o = getIntent().getParcelableExtra("artist");
        if(o!=null){
            artist = (Artist)o;
        }

        progressRunnable(new Runnable(){
            public void run(){
                getTracks();
            }
        }, "Loading. Please Wait...",false);


    }

    protected void getTracks() {
        METHOD_TYPE = GET_AUDIO;
        if(!DataBaseHelper.isOnline(this)){
            RUNNABLE_STATE = RUNNABLE_FAILED;
            return;
        }
        HttpRequest req;
        try {
            req = new HttpRequest(new URL(AUDIO_FEED_URL+artist.requestInfo("rhapsodyID")));
            Document doc = req.AutoXMLNoWrite();
            NodeList items = doc.getElementsByTagName("e");
            tracks= new ArrayList<Track>();
            for(int i=0; i<items.getLength(); i++){
                Track newsitem = new Track(items.item(i));
                tracks.add(newsitem);   
            }
            RUNNABLE_STATE = RUNNABLE_SUCCESS;
        } catch (Throwable e) {
            RUNNABLE_STATE = RUNNABLE_FAILED;
            e.printStackTrace();
        }   
    }

    public void onPause(){
        super.onPause();
        try{mp.stop();}catch(Exception e){e.printStackTrace();}
        try{mp.reset();}catch(Exception e){e.printStackTrace();}
        try{mp.release();}catch(Exception e){e.printStackTrace();}
        mp = null;

    }

    private class TrackListAdapter extends BaseAdapter{

        @Override
        public int getCount() {
            // TODO Auto-generated method stub
            return tracks.size();
        }

        @Override
        public Object getItem(int position) {
            // TODO Auto-generated method stub
            return tracks.get(position);
        }

        @Override
        public long getItemId(int position) {
            // TODO Auto-generated method stub
            return position;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            // TODO Auto-generated method stub
            AudioCell blogView = null;
            if (convertView != null) {
                if(convertView.getClass() == TextView.class){
                    convertView = null;
                }
            }
            if (convertView == null) {
                blogView = new AudioCell(parent.getContext());
            }
            else {
                blogView = (AudioCell) convertView;
            }
            blogView.display(position);
            return blogView;
        }
    } 

    /** this class is responsible for rendering the data in the model, given the selection state */
    class AudioCell extends RelativeLayout {

        TextView _title;



        int currentPosition;



        public AudioCell(Context mContext) {
            super(mContext);
            _createUI(mContext);
        }

        /** create the ui components */
        private void _createUI(Context m) {


            RelativeLayout.LayoutParams params;
            DisplayMetrics metrics = new DisplayMetrics();
            getWindowManager().getDefaultDisplay().getMetrics(metrics);
            params = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);

            _player = new TextView(m);
            _player.setId(2);
            _player.setBackgroundResource(R.drawable.playbtn);
            _player.setText(":30");





            addView(_player);
            params.addRule(RelativeLayout.CENTER_VERTICAL,1);
            _player.setLayoutParams(params);


            _title = new TextView(m);
            _title.setTextColor(Color.BLACK);       
            params = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT,(int)(44*metrics.density));
            params.addRule(RelativeLayout.CENTER_VERTICAL,1);
            params.addRule(RelativeLayout.RIGHT_OF, _player.getId());

            params.setMargins(0, 10, 0, 10);
            _title.setGravity(Gravity.CENTER_VERTICAL);
            _title.setLayoutParams(params);
            _title.setId(102);
            addView(_title);
            params = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT,(int)(44*metrics.density));

//          _player.setOnClickListener(new View.OnClickListener() {
//              
//              @Override
//              public void onClick(View v) {
//                  PlaySong.PlaySong("http://http://www.noiseaddicts.com/samples/2544.mp3");
//                  
//              }
//          });
//          














        }

        /** update the views with the data corresponding to selection index */
        public void display(int index) {
            _title.setText(tracks.get(index).requestInfo("name"));
        }
    }

    private class PlaySong implements Runnable{
        String songURL;

        public PlaySong(String url){
            songURL = url;
        }

        public void run(){
            try{mp.stop();}catch(Exception e){e.printStackTrace();}


            try{mp.reset();}catch(Exception e){e.printStackTrace();}

            if(mp==null){
                createPlayer();
            }
            try{mp.reset();}catch(Exception e){e.printStackTrace();}
            try{mp.setAudioStreamType(AudioManager.STREAM_MUSIC);}catch(Exception e){e.printStackTrace();}
            try{mp.setDataSource(songURL);}catch(Exception e){e.printStackTrace();}
            try{mp.prepareAsync();}catch(Exception e){e.printStackTrace();}



        }
    }

    public void createPlayer(){
        mp = new MediaPlayer();
        mp.setOnCompletionListener(this);
        mp.setOnPreparedListener(this);
        mp.setOnErrorListener(this);
        mp.setAudioStreamType(AudioManager.STREAM_MUSIC);
    }

    @Override
    public void onCompletion(MediaPlayer mp) {
        // TODO Auto-generated method stub
        try{mp.reset();}catch(Exception e){e.printStackTrace();}
//      if(mSongPlaying<tracks.size()-1)
//      {
//          TrackClicked(mSongPlaying+1);
//      }



        _player.setBackgroundResource(R.drawable.playbtn);

    }

    @Override
    public void onPrepared(MediaPlayer inMP) {
        // TODO Auto-generated method stub



        mp.start();
        if(mp.isPlaying()) {
            _player.setBackgroundResource(R.drawable.pausebtn);
            _player.setText(" :" + String.valueOf(mp.getDuration()/1000));


        }

    }

    @Override
    public boolean onError(MediaPlayer mp, int what, int extra) {
        // TODO Auto-generated method stub
        return false;
    }
}   
package com.me.player
导入java.net.URL;
导入java.util.ArrayList;
导入org.w3c.dom.Document;
导入org.w3c.dom.NodeList;
导入android.content.Context;
导入android.graphics.Color;
导入android.media.AudioManager;
导入android.media.MediaPlayer;
导入android.media.MediaPlayer.OnCompletionListener;
导入android.media.MediaPlayer.OnErrorListener;
导入android.media.MediaPlayer.OnPreparedListener;
导入android.os.Bundle;
导入android.util.DisplayMetrics;
导入android.view.Gravity;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.AdapterView;
导入android.widget.BaseAdapter;
导入android.widget.ListView;
导入android.widget.RelativeLayout;
导入android.widget.TextView;
导入android.widget.AdapterView.OnItemClickListener;
导入com.mtv.datahandler.Artist;
导入com.mtv.datahandler.DataBaseHelper;
导入com.mtv.datahandler.Track;
导入com.mycompany.http.HttpRequest;
公共类ArtistAudio扩展了ControllerActivity实现OnCompletionListener、OnPreparedListener和OnErrorListener{
私有int方法_TYPE=0;
专用静态最终int GET_AUDIO=1;
int当前位置=0;
int持续时间=0;
公共静态最终字符串音频\u提要\u URL=”http://direct.rhapsody.com/metadata/data/getTopTracksForArtist.xml?blabla";
公共静态最终int MAX_轨道=200;
ArrayList轨迹=新建ArrayList();
艺术家;
私人媒体播放器;
私用int-mSongPlaying=0;
文本视图(u播放器),;
@凌驾
受保护的无效进程RunnableComplete(){
if(isFinishing()){
返回;
}
if(方法类型==获取音频){
setList();
}
}
公共无效集合列表(){
ListView ListView=(ListView)findViewById(R.id.ListView01);
//ListView ListView=(ListView)findViewById(R.id.ListView01);
如果(listview==null){
设置内容(R.layout.artistaudio);
listview=(listview)findViewById(R.id.ListView01);
}
//listview.addHeaderView();
setCacheColorHint(0);
setAdapter(新的TrackListAdapter());
listview.setSelector(R.drawable.listbackground);
setDividerHeight(1);
setDivider(getResources().getDrawable(R.drawable.img_虚线_水平线));
setOnItemClickListener(新的OnItemClickListener(){
@凌驾
公共链接(AdapterView arg0、视图arg1、,
整数arg2,长arg3){
//TODO自动生成的方法存根
(arg2);
}
});
}
已单击的公共无效跟踪(int arg2){
mSongPlaying=arg2;
Track Track=tracks.get(arg2);
字符串url=track.requestInfo(“previewURL”);
mHandler.post(新播放歌曲(url));
//mHandler.post(新播放歌曲(“http://dc237.4shared.com/img/315443275/33f14ef2/dlink__2Fdownload_2F9y5VGjVt_3Ftsid_3D20100705-131850-40aa0b87/preview.mp3"));
}
公共无效设置持续时间(整数n){
持续时间=n;
}
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
片名(“音频剪辑”);
设置内容(R.layout.artistaudio);
对象o=getIntent().getParcelableExtra(“艺术家”);
如果(o!=null){
艺术家=(艺术家)o;
}
progressRunnable(新Runnable(){
公开募捐{
getTracks();
}
},“正在加载,请稍候…”,false);
}
受保护的void getTracks(){
方法\类型=获取\音频;
如果(!DataBaseHelper.isOnline(此)){
RUNNABLE_STATE=RUNNABLE_失败;
返回;
}
HttpRequest请求;
试一试{
req=newhttprequest(新的URL(音频提要URL+artist.requestInfo(“rhapsodyID”));
Document doc=req.AutoXMLNoWrite();
节点列表项=doc.getElementsByTagName(“e”);
tracks=newarraylist();

对于TrackClicked方法中的(int i=0;i),添加以下内容:

getAdapter().getChildAt(arg2).setBackgroundResource(R.drawable.thebackground);

更改
TrackClicked
方法的signature。从
onimclick
传递
arg1
arg3
,并在
TrackClicked
方法中执行此操作
arg1.setBackgroundResource(R.drawable.thebackground)设置整行背景资源的

。我想设置该行中某个文本视图的背景。然后尝试此操作。将
arg1
转换为
AudioCell
。假设要更改
\u title
字段的背景,请尝试此
((AudioCell)arg1)。\u title.setBackgroundResource(R.drawable.thebackground);