我创建了一个自定义视图,其中包含两个投票按钮,竖起大拇指和竖起大拇指。
其中一个按钮可以一次处于活动状态,单击一个按钮可以禁用另一个按钮。
所有这些都可以,但是这些按钮可以在不同的地方使用,但都代表相同的项目。
是否可以在视图的所有实例中复制这些按钮的状态?那么当它在一个地方被点击时,那个投票状态会自动显示在其他地方吗?
这里有任何帮助。
感谢。
编辑:这是我的代码示例。这适用于每个单独的实例,但它们都是独立运作的。
public class VoteButtons extends RelativeLayout {
OnVoteListener mListener;
String playedItemId = null;
View rootView;
@Bind(R.id.vote_up_button)
ImageButton voteUpButton;
@Bind(R.id.vote_down_button)
ImageButton voteDownButton;
Context mContext;
VoteState state = VoteState.VOTED_NONE;
enum VoteState {
VOTED_UP, VOTED_DOWN, VOTED_NONE
}
public VoteButtons(Context context) {
this(context, null);
}
public VoteButtons(Context context, AttributeSet attrs) {
super(context, attrs);
this.mContext = context;
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
rootView = inflater.inflate(R.layout.vote_buttons, this, true);
ButterKnife.bind(this, rootView);
}
@OnClick(R.id.vote_down_button)
public void onClickVoteDown(ImageButton voteDownButton) {
if(state == VoteState.VOTED_NONE) {
state = VoteState.VOTED_DOWN;
if(mListener != null && playedItemId != null) mListener.onVoteDown(playedItemId);
} else {
state = VoteState.VOTED_NONE;
if(mListener != null && playedItemId != null) mListener.onVoteCancel(playedItemId);
}
updateButtonStates();
}
@OnClick(R.id.vote_up_button)
public void onClickVoteUp(ImageButton voteDownButton) {
if(state == VoteState.VOTED_NONE) {
state = VoteState.VOTED_UP;
if(mListener != null && playedItemId != null) mListener.onVoteUp(playedItemId);
} else {
if(mListener != null && playedItemId != null) mListener.onVoteCancel(playedItemId);
state = VoteState.VOTED_NONE;
}
updateButtonStates();
}
private void updateButtonStates() {
switch(state) {
case VOTED_UP:
Drawable greenVoteUpDrawable = DrawableCompat.wrap(ContextCompat.getDrawable(mContext, R.drawable.ic_thumb_up_black_24dp).mutate());
DrawableCompat.setTint(greenVoteUpDrawable, Color.parseColor("#7FD473"));
voteUpButton.setImageDrawable(greenVoteUpDrawable);
break;
case VOTED_DOWN:
Drawable greenVoteDownDrawable = DrawableCompat.wrap(ContextCompat.getDrawable(mContext, R.drawable.ic_thumb_down_black_24dp).mutate());
DrawableCompat.setTint(greenVoteDownDrawable, Color.parseColor("#ED5756"));
voteDownButton.setImageDrawable(greenVoteDownDrawable);
break;
case VOTED_NONE:
// Show original drawables
voteUpButton.setImageDrawable(ContextCompat.getDrawable(mContext, R.drawable.ic_thumb_up_black_24dp));
voteDownButton.setImageDrawable(ContextCompat.getDrawable(mContext, R.drawable.ic_thumb_down_black_24dp));
break;
}
}
public void setOnVoteListener(OnVoteListener listener) {
mListener = listener;
}
public interface OnVoteListener {
void onVoteUp(String playedItemId);
void onVoteDown(String playedItemId);
void onVoteCancel(String playedItemId);
}
}
答案 0 :(得分:0)
是的,您可以将这两个按钮放在某个特定的布局中,并通过合并标记在其他布局中使用此布局。