1

У меня есть 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):

enter image description here

+0

Визуально, то, что вы ожидаете увидеть на «выбранного» пункта? –

+0

@AliNaddaf Я ожидаю увидеть определенный элемент с центром и «активным», я редактирую свой вопрос, чтобы опубликовать пример изображения – rubdottocom

ответ

1

Наконец mListView.scrollToPosition(stopsForewarningIndex); то, что мне нужно было

Смежные вопросы