我在一个ListFragment
中有两个Activity
+单个片段。第一个列表显示了一个课程列表,在选择课程时,您将看到第二个包含主题的列表,并在选择主题编辑器时打开,用户通过LongClicking(通过ColorChooserDialog
)为课程和主题着色。 / p>
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
的alpha吗?或者我可以在选择器drawable上添加项目颜色吗?
这里运行app的图片: UI Snapshot
答案 0 :(得分:0)
使用View
的“提升”属性为您的商品选择&#34;选择&#34;看。
Assign Elevation To Your Views
答案 1 :(得分:0)
似乎通过将颜色值(精确的Alpha值)从0xFFXXXXXX更改为0xAAXXXXXX或任何更低的alpha值,通过TextView背景可以看到选择器的darker_gray颜色:
switch(lesson.getColor()){
case Lesson.NO_COLOR:
titleTextView.setBackgroundColor(0x00000000);
break;
case Lesson.COLOR_BLUE:
titleTextView.setBackgroundColor(0xAA0099CC);
break;
case Lesson.COLOR_GREEN:
titleTextView.setBackgroundColor(0xAA99CC00);
break;
case Lesson.COLOR_YELLOW:
titleTextView.setBackgroundColor(0xAAFFFF44);
break;
case Lesson.COLOR_RED:
titleTextView.setBackgroundColor(0xAAFF4444);
break;
}
return convertView;
}
现在,颜色似乎是在ListSelector的顶部绘制的,但它仍然可以,因为它显示了选择的项目.Of它不是一个好的设计,但仍然是一个快速的快捷方式来完成这项工作。