Я использую AndroidSwipeableCardStack, чтобы сделать такой интерфейс, как 5-ти звездная система. Когда я нажимаю кнопку, предназначенную для изменения изображения. Изображение сменит три карты позже не на текущей карте.Android: setImageResource в сменном адаптере изображения 3 позиции позже
Это проект, который я использовал: https://github.com/wenchaojiang/AndroidSwipeableCardStack
Я предполагаю, что делать с ней предварительно загрузить следующую карту как recyclerview обычно делает, но я действительно не уверен.
Этот мой переходник ниже, вы можете видеть внизу, я вызываю setimageresource на одноименную кнопку изображения рейтинга onclicklistner. Я установил Log.d, и щелчок кнопки регистрируется сразу после клика, но изменение ресурса изображения появляется только после того, как были извлечены 3 карты.
Редактировать: Поэтому я заметил, что независимо от проекта, который я импортировал, мой адаптер расширяет только ArrayAdatper. Поэтому я догадался, что проблема может быть в методе getView и что мне может потребоваться переопределить что-то еще (не уверен). Но важный момент, я проверил позицию в getView, запустив позицию и, конечно же, сказал, что она имеет значение 0,1,2,3, и ничего не вытащили. Это аналогично смещению setImageResource, поэтому я считаю, что они взаимосвязаны, но, к сожалению, это не приближает меня к ответу.
Благодарим за помощь.
public class SongPreviewCardsDataAdapter extends ArrayAdapter<SongDatabaseMappingAdapter> {
public SongPreviewCardsDataAdapter(Context context, int resource) {
super(context, resource);
}
ImageButton oneStarRating;
@Override
public View getView(int position, final View contentView, ViewGroup parent) {
// Initialise Song Views
SongDatabaseMappingAdapter item = getItem(position);
TextView songName = (TextView) (contentView.findViewById(R.id.songNameTextView));
songName.setText(item.getSongTitle());
com.mikhaellopez.circularimageview.CircularImageView songImage = (CircularImageView) contentView.findViewById(R.id.songImageView);
String ImageURL = (item.getPictureURL());
Picasso
.with(this.getContext())
.load(ImageURL)
.into(songImage);
// Initialise Rating Buttons
oneStarRating = (ImageButton) contentView.findViewById(R.id.ratingButton1);
// Create OnClickListners for Ratings Buttons
oneStarRating.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
oneStarRating.setImageResource(R.drawable.starfull);
Log.d("Star", "Star Clicked");
}
});
return contentView;
}
}
Спасибо, что ответили. Я понимаю до последней части. Я создал getter/setter, я изменил метод getView с помощью оператора if. Это прекрасно работает. То, что сейчас озадачило меня, - это сделать OnClickListner. Это CardStack. В моем createView я делаю следующее: mCardStack = (CardStack) view.findViewById (R.id.cardstackcontainer); и, как вы сказали, я могу сделать mCardStack.setOnClickListener(); Однако не уверен, как это изменит звезду, если щелкнуть звезду (будет 5 звезд). Изменит ли это изменение звезды, если в любой точке карты будет нажата кнопка? –
Извините, я не понимал, что 'CardStack' фактически был списком. См. Мой обновленный ответ. –
Огромное вам спасибо, что убил меня. Мне нужно было внести два изменения, чтобы заставить его работать (и это, вероятно, практика на пэде), поэтому, пожалуйста, дайте мне знать, если и как мне нужно их изменить. Когда я объявлял getOneStar/setOneStar, я должен был сказать, что он был ложным, или я получил нулевой указатель, а также где вы помещаете oneStarRating.setImageDrawable (null); Мне пришлось прокомментировать это, потому что снова я получил ошибку nullpointer. независимо от того, работает он Спасибо! –