Как добавить spinner для субтитров - как в приложении Play Music для Android?
![Play Music screenshot]()
Обратитесь к прилагаемому изображению.
setListNavigationCallbacks(mSpinnerAdapter, mNavigationCallback)
добавляет прядильник, вращающийся в разделе "Моя библиотека", и я не могу добавить под ним список подписок. Я не могу найти метод, который добавляет прядильщик для "ALL MUSIC", а не вмешивается в основное название панели действий.
Любая помощь приветствуется!
Ответы
Ответ 1
Он выглядит как настроенный ArrayAdapter
Вам нужно реализовать getDropDownView
и вернуть представление, которое вы хотели бы видеть.
Не стесняйтесь изменять код. Это просто доказательство концепции.
В вашей деятельности:
getActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
getActionBar().setTitle("");
getActionBar().setListNavigationCallbacks(new MySpinnerAdapter(this, R.layout.customspinneritem, items), new OnNavigationListener() {
@Override
public boolean onNavigationItemSelected(int itemPosition, long itemId) {
return false;
}
});
MySpinnerAdapter:
public class MySpinnerAdapter extends ArrayAdapter<String>{
// CUSTOM SPINNER ADAPTER
private Context mContext;
public MySpinnerAdapter(Context context, int textViewResourceId,
String[] objects) {
super(context, textViewResourceId, objects);
mContext = context;
// TODO Auto-generated constructor stub
}
@Override
public View getDropDownView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
return getCustomView(position, convertView, parent);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
return getCustomView(position, convertView, parent);
}
public View getCustomView(int position, View convertView,ViewGroup parent) {
// TODO Auto-generated method stub
// return super.getView(position, convertView, parent);
LayoutInflater inflater =
( LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
ViewHolder holder;
if (convertView == null) {
convertView = inflater.inflate(R.layout.customspinneritem, null);
holder = new ViewHolder();
holder.txt01 = (TextView) convertView.findViewById(R.id.TextView01);
holder.txt02 = (TextView) convertView.findViewById(R.id.TextView02);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.txt01.setText("My Library");
holder.txt02.setText("ALL MUSIC");
return convertView;
}
class ViewHolder {
TextView txt01;
TextView txt02;
}
} // end custom adapter
![enter image description here]()
Ответ 2
Я не могу комментировать ответы еще из-за моей репутации, но для реализации этого так же, как приложение Google Music, я думаю, вы хотели бы использовать другой метод для getDropDownView()
, потому что выпадающее меню в Google Music как обычный выпадающий список.
Замена метода prijupaul следующим образом - идея, для которой вы бы искали.
Вот так:
@Override
public View getDropDownView(int position, View convertView, ViewGroup parent) {
DropDownViewHolder holder = null;
if (convertView == null) {
LayoutInflater inflater = ((Activity) mContext).getLayoutInflater();
convertView = inflater.inflate(R.layout.dropdown_list_item, parent, false);
holder = new DropDownViewHolder();
holder.mTitle = (TextView) convertView.findViewById(R.id.textView_dropdown_title);
convertView.setTag(holder);
} else {
holder = (DropDownViewHolder) convertView.getTag();
}
// Should have some sort of data set to go off of, we'll assume
// there is a some array called mData.
holder.mTitle.setText(mData[position]);
return convertView;
}
public class DropDownViewHolder {
TextView mTitle;
}
Я решил, что код должен быть явным.
Ответ 3
Вот решение. Нам нужно создать другой метод для getView (...), а также нужно отслеживать элемент, выбранный из раскрывающегося списка. Как только элемент из ящика навигации щелкнут, вызовите новый метод (создайте новый метод в адаптере spinner в качестве заголовка обновления) llike
public void setHeaderTitle(String str) {
titleTxt = str;
}
Разный метод, вызванный из представления view
@Override
public View getView(int position, View convertView, ViewGroup parent) {
return getBarView(position);
}
private View getBarView(int position) {
if (displayHolder == null) {
LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView1 = inflater.inflate(R.layout.actionbar_spinner_item, null);
displayHolder = new ViewHolder();
}
displayHolder.txt01 = (TextView) convertView1.findViewById(R.id.actionBarTitle123);
displayHolder.txt02 = (TextView) convertView1.findViewById(R.id.actionBarSubTitle123);
displayHolder.txt01.setText(titleTxt);
displayHolder.txt02.setText(items[curPos]);
return convertView1;
}
И при выпадающем элементе выбирается вызов ниже метода
public void setHeaderSubTitle(int pos) {
// update display of sub title
curPos = pos;
getBarView(pos);
}
Позвольте мне знать, что нужно еще что-нибудь.