У меня есть два ListFragment
+ Отдельный фрагмент всего в одном Activity
. Первый список показать список уроков, которые при выборе урока вы показаны второй список, который содержит темы и после выбора темы редактора открывает, уроки и темы окрашиваются пользователями, LongClicking их (Via ColorChooserDialog
) ..Как выделить [Уже окрашенный] выбран ListItem в ListView
package com.fins.newyeartable;
import java.util.ArrayList;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.ListFragment;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemLongClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;
public class LessonListFragment extends ListFragment {
private static final int REQUEST_COLOR = 0;
private static final String DIALOG_COLOR = "color";
private static final String DIALOG_SETTING = "setting";
private ArrayList<Lesson> mLessons;
private Callbacks mCallbacks;
public interface Callbacks{
void onLessonSelected(int lessonId);
void onTableChange();
}
@Override
public void onAttach(Activity activity){
super.onAttach(activity);
mCallbacks = (Callbacks)activity;
}
@Override
public void onDetach(){
super.onDetach();
mCallbacks = null;
}
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setRetainInstance(true);
setHasOptionsMenu(true);
mLessons = MyTable.get(getActivity(), AppSetting.getTableType()).getLessons();
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_lessonlist, parent, false);
LessonAdapter adapter = new LessonAdapter(mLessons);
setListAdapter(adapter);
ListView listView = (ListView)v.findViewById(android.R.id.list);
listView.setLongClickable(true);
listView.setOnItemLongClickListener(new OnItemLongClickListener() {
public boolean onItemLongClick(AdapterView<?> parent, View v, int position, long id) {
Lesson lesson = ((LessonAdapter)getListAdapter()).getItem(position);
FragmentManager fm = getActivity().getSupportFragmentManager();
ColorChooserDialog dialog = ColorChooserDialog.newInstance(lesson.getId(), -1);
dialog.setTargetFragment(LessonListFragment.this, REQUEST_COLOR);
dialog.show(fm, DIALOG_COLOR);
return true;
}
});
//listView.setSelector(android.R.color.darker_gray);
return v;
}
private class LessonAdapter extends ArrayAdapter<Lesson>{
public LessonAdapter(ArrayList<Lesson> lessons){
super(getActivity(), 0, lessons);
}
public View getView(int position, View convertView, ViewGroup parent){
if(convertView == null)
convertView = getActivity().getLayoutInflater().inflate(R.layout.list_item_lesson, null);
//Link Data to View
final Lesson lesson = getItem(position);
TextView titleTextView = (TextView)convertView.findViewById(R.id.list_item_textView);
titleTextView.setText(lesson.getTitle());
switch(lesson.getColor()){
case Lesson.NO_COLOR:
titleTextView.setBackgroundColor(0x00000000);
break;
case Lesson.COLOR_BLUE:
titleTextView.setBackgroundColor(0xFF0099CC);
break;
case Lesson.COLOR_GREEN:
titleTextView.setBackgroundColor(0xFF99CC00);
break;
case Lesson.COLOR_YELLOW:
titleTextView.setBackgroundColor(0xFFFFFF44);
break;
case Lesson.COLOR_RED:
titleTextView.setBackgroundColor(0xFFFF4444);
break;
}
return convertView;
}
}
@Override
public void onListItemClick(ListView l, View v, int position, long id){
Lesson lesson = ((LessonAdapter)getListAdapter()).getItem(position);
mCallbacks.onLessonSelected(lesson.getId());
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data){
if(requestCode == REQUEST_COLOR){
((LessonAdapter)getListAdapter()).notifyDataSetChanged();
}
}
}
Что я хочу: показать пользователям выбранный урок и тему, чтобы они не путались при редактировании деталей в фрагменте редактора. Я не могу использовать селекторы как:
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:state_activated="true"
android:drawable="@android:color/darker_gray" />
</selector>
Потому что у меня уже есть окрашивать ListItem
по цвету выбранного пользователем цвет селектора обыкновение появляться в цветных список предметов, так, что селектор может использоваться здесь? Могу ли я просто изменить альфу выбранных ListItem
? Или я могу добавить цвет элемента над выделенным селектором?
Здесь Изображение приложение работает: UI Snapshot
Если вы используете Material Design, вы можете установить более высокое значение оси z для отображения элемента сверху. Если вы этого не сделаете, я бы выбрал еще один оттенок той же цветовой палитры. –
Позиция элементов фиксируется в списке, я просто хочу изменить цвет, чтобы показать, что элемент выбран. Но Селекторы не могут понять цвет элементов, поэтому я остался с единственным селектором цвета. – Darky
Я знаю, что они зафиксированы в списке, по z-index Я имел в виду это: [Назначить возвышение к вашим представлениям] (https: //developer.android.com/training/material/shadows-clipping.html#Elevation) –