У меня есть WearableListView в фрагменте на приложении Wear.WearableListView как предварительно выбрать элемент?
С телефона Я отправляю, какой элемент, его позиция, должен быть выбран по умолчанию.
Но я не знаю, как установить выбранный элемент (у меня нет большого опыта работы с RecycleView).
Поэтому, когда я получаю позицию, я обновляю адаптер и вызываю notifyDataSetChanged, поэтому onBindViewHolder, если позиция match I setSelected и setActivated - true для соответствующего элемента. Но не работает.
Init фрагмент
public BoxInsetLayout mContainerView;
WearableListView mListView;
String[] elements = { "1 parada", "2 paradas", "3 paradas" };
private Adapter mAdapter;
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
mContainerView = (BoxInsetLayout) getActivity().findViewById(R.id.list_container);
// Get the list component from the layout of the activity
mListView =
(WearableListView) getActivity().findViewById(R.id.wearable_list);
mListView.setGreedyTouchMode(true);
// Assign an adapter to the list
mAdapter = new Adapter(getActivity(), elements, -1);
mListView.setAdapter(mAdapter);
// Set a click listener
mListView.setClickListener(this);
mListView.addOnCentralPositionChangedListener(new WearableListView.OnCentralPositionChangedListener() {
@Override
public void onCentralPositionChanged(int i) {
// TODO: Llamar a TrasnportMe con el valor escogido
Utils.sendMessage(Constants.SERVICE_CALLED_WEAR, i + "");
Log.e(TAG, "My pos: " + i);
}
});
IntentFilter messageFilter = new IntentFilter(Intent.ACTION_SEND);
MessageReceiver messageReceiver = new MessageReceiver();
LocalBroadcastManager.getInstance(getActivity()).registerReceiver(messageReceiver, messageFilter);
}
приемник, что поймать обновления положения
public class MessageReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Bundle b = intent.getBundleExtra("message");
String stopsForewarning = b.getString("stopsForewarning");
Log.e(TAG, "STOPS FOREWARNING WEAR: " + stopsForewarning);
int stopsForewarningIndex = 0;
if ("1".equals(stopsForewarning)) {
stopsForewarningIndex = 0;
} else if ("2".equals(stopsForewarning)) {
stopsForewarningIndex = 1;
} else if ("3".equals(stopsForewarning)) {
stopsForewarningIndex = 2;
}
if (mAdapter != null && getActivity() != null) {
mAdapter = new Adapter(getActivity(), elements, stopsForewarningIndex);
mAdapter.notifyDataSetChanged();
mListView.setAdapter(mAdapter);
}
}
}
Мой адаптер
private static final class Adapter extends WearableListView.Adapter {
private final int mSelectedPosition;
private String[] mDataset;
private final Context mContext;
private final LayoutInflater mInflater;
// Provide a suitable constructor (depends on the kind of dataset)
public Adapter(Context context, String[] dataset, int selectedPosition) {
mContext = context;
mInflater = LayoutInflater.from(context);
mDataset = dataset;
mSelectedPosition = selectedPosition;
}
// Provide a reference to the type of views you're using
public static class ItemViewHolder extends WearableListView.ViewHolder {
private TextView textView;
public ItemViewHolder(View itemView) {
super(itemView);
// find the text view within the custom item's layout
textView = (TextView) itemView.findViewById(R.id.name);
}
}
// Create new views for list items
// (invoked by the WearableListView's layout manager)
@Override
public WearableListView.ViewHolder onCreateViewHolder(ViewGroup parent,
int viewType) {
// Inflate our custom layout for list items
return new ItemViewHolder(mInflater.inflate(R.layout.list_item, null));
}
// Replace the contents of a list item
// Instead of creating new views, the list tries to recycle existing ones
// (invoked by the WearableListView's layout manager)
@Override
public void onBindViewHolder(WearableListView.ViewHolder holder,
int position) {
// retrieve the text view
ItemViewHolder itemHolder = (ItemViewHolder) holder;
TextView view = itemHolder.textView;
// replace text contents
view.setText(mDataset[position]);
view.setTag(position);
// replace list item's metadata
holder.itemView.setTag(position);
Log.e(TAG, "Adapter, selected position: " + mSelectedPosition);
if (mSelectedPosition != -1) {
if (position == mSelectedPosition) {
holder.itemView.setSelected(true);
holder.itemView.setActivated(true);
}
}
}
// Return the size of your dataset
// (invoked by the WearableListView's layout manager)
@Override
public int getItemCount() {
return mDataset.length;
}
}
Редактировать:
Что я ожидаю, список был перемещен (см. Перемещение или прокрутка не требуется) к определенному элементу. В этом примере я переехал, вручную, на 2-ю позицию (индекс 1):
Визуально, то, что вы ожидаете увидеть на «выбранного» пункта? –
@AliNaddaf Я ожидаю увидеть определенный элемент с центром и «активным», я редактирую свой вопрос, чтобы опубликовать пример изображения – rubdottocom