当按下位置时,改变列表视图按钮的状态。

问题描述 投票:0回答:1

我有一个列表视图,其中每一行都有播放按钮。如果我点击第一行播放按钮,它将变为暂停,但如果我按下第二行播放按钮,那么第一行将保持暂停状态,但我希望如果任何一个按钮被按下,那么前一个按钮将恢复到播放状态,而被点击的按钮将变为暂停。

public class RingsAdapter extends BaseAdapter {

private Context context;
private ArrayList<Ringsinfo> data;
private SqlLiteDbHelper db;
private MediaPlayer mediaPlayer;
int pause_button_position = -1;

public RingsAdapter(Context mContext) {
    data = new ArrayList<Ringsinfo>();
    context = mContext;
    initDatabase(context);
    mediaPlayer = new MediaPlayer();
}

private void initDatabase(Context c) {
    db = new SqlLiteDbHelper(c);
    try {
        db.CopyDataBaseFromAsset();
        db.openDataBase();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

public void AddAll(ArrayList<Ringsinfo> listperson) {
    data.clear();
    data.addAll(listperson);
    notifyDataSetChanged();
}

@Override
public int getCount() {
    return this.data.size();
}

@Override
public Object getItem(int position) {
    return (Ringsinfo) this.data.get(position);
}

@Override
public long getItemId(int position) {
    return (long) position;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    HolderView mHolderView;

    if (convertView == null) {
        mHolderView = new HolderView();
        convertView = ((LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.row_ringtone_list, parent, false);
        mHolderView.btnPlay = (Button) convertView.findViewById(R.id.btnPlay);
        mHolderView.btnSetting = (Button) convertView.findViewById(R.id.btnSetting);
        mHolderView.tvRingName = (TextView) convertView.findViewById(R.id.tvRingName);
        convertView.setTag(mHolderView);
    } else {
        mHolderView = (HolderView) convertView.getTag();
    }
    mHolderView.tvRingName.setText(((Ringsinfo) this.data.get(position)).name);
    mHolderView.btnSetting.setOnClickListener(new RingDetails(position));
    mHolderView.btnPlay.setOnClickListener(new playRingtone(position));

    if (position != pause_button_position)
        mHolderView.btnPlay.setBackgroundResource(R.mipmap.play);

    return convertView;
}

class RingDetails implements View.OnClickListener {
    final int val$position;

    RingDetails(int i) {
        this.val$position = i;
    }

    public void onClick(View view) {
        Intent intent = new Intent(context, RingDetailActivity.class);
        intent.putExtra("calls", ((Ringsinfo) data.get(this.val$position)).content);
        intent.putExtra("heading", ((Ringsinfo) data.get(this.val$position)).name);
        context.startActivity(intent);
    }
}

class playRingtone implements View.OnClickListener {
    int val$position;

    playRingtone(int i) {
        val$position = i;
    }

    public void onClick(View view) {
        if (mediaPlayer.isPlaying()) {
            mediaPlayer.pause();
            view.setBackgroundResource(R.mipmap.play);
        } else {
            view.setBackgroundResource(R.mipmap.pause);
            pause_button_position = val$position;
            mediaPlayer.start();
        }
        mediaPlayer.reset();
        mediaPlayer = MediaPlayer.create(context, new Builder().scheme("android.resource").authority(context.getPackageName()).appendPath(String.valueOf(context.getResources().getIdentifier(((Ringsinfo) data.get(val$position)).content + BuildConfig.FLAVOR, "raw", context.getPackageName()))).build());
        mediaPlayer.start();
    }
}

private class HolderView {
    private Button btnPlay, btnSetting;
    private TextView tvRingName;
}

public void Stop() {
    if (mediaPlayer != null && mediaPlayer.isPlaying()) {
        mediaPlayer.reset();
        mediaPlayer.stop();
        mediaPlayer.release();
    }
}}
android listview onclicklistener baseadapter
1个回答
0
投票

你需要写 else 适配器中的条件,在那里你改变了你的背景,以满足你的需求。ImageView

if (position != pause_button_position)
        mHolderView.btnPlay.setBackgroundResource(R.mipmap.play);
else
        mHolderView.btnPlay.setBackgroundResource(R.mipmap.pause);

另外,如果您能在 Adapter 来管理你的播放暂停按钮。像你的 Boolean 列表的大小与您的 ArrayList...一旦用户点击第一个播放按钮,那么你需要在布尔列表的第一个位置设置为true,其余的位置为false。同样的,如果用户点击第二个播放按钮,那么在你的布尔列表的第二位设置为真,其余的为假。Boolean 列举并保留其余的错误,并通知您的 Adapter.而你的播放暂停按钮背景现在是基于布尔列表的。

© www.soinside.com 2019 - 2024. All rights reserved.