Intereting Posts
Исцеление камеры Должны ли мы использовать анонимные классы для OnClickListeners или внутренних именованных классов? Переработка просмотров в списке, стоит? Яковидный файл содержимого кода Jacoco пустой, что приводит к отчетам о ложном покрытии Android Spinner – как изменить размер выбранного элемента? Android – объединение двух файлов MP4 Android Studio: Gradle Refresh Failed – Не удалось найти com.android.tools.build:gradle:2.2.0-alpha6 Не удается удалить фрагмент из FrameLayout? DataBinding не работает после обновления Android Studio 2.3 Android – xml – включить один и тот же макет несколько раз не работает Удаленный выход gdb для Android мучительно медленный Стратегия Android для отслеживания сеанса входа в систему Как мы показываем кнопку «Назад» вместо кнопки «Готово» («галочка») в контекстной панели действий на Android Сохранение переменных (Android) В HttpURLConnection Почему JSONObject не работает в Params, но String, поскольку Params работают

ListView внутри фрагмента, используемого в ViewPager, не ведет себя так, как ожидалось

У меня возникла проблема с элементами в этом списке. Обычное поведение заключается в том, что при нажатии пользователем одного элемента цвет фона меняется на оранжевый. Это не происходит с моим приложением, и я не могу понять, почему.

У файла main.xml есть только:

<android.support.v4.view.ViewPager android:id="@+id/pager" android:layout_width="fill_parent" android:layout_height="0dp" android:layout_weight="1" /> 

XML-фрагмент имеет только:

 <ListView android:id="@android:id/list" style="@style/MyListView" android:layout_width="match_parent" android:layout_height="match_parent" > </ListView> 

Представление, которое я надуваю внутри элемента listView:

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:clickable="true" android:focusable="true" android:focusableInTouchMode="true" > <ImageView android:id="@+id/imageView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:clickable="false" android:focusable="false" android:focusableInTouchMode="false" android:src="@drawable/ic_launcher" /> <TextView android:id="@+id/textViewName" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_marginLeft="5dp" android:layout_toRightOf="@+id/imageView1" android:clickable="false" android:focusable="false" android:focusableInTouchMode="false" android:text="" android:textAppearance="?android:attr/textAppearanceMedium" /> <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBottom="@+id/imageView1" android:layout_alignLeft="@+id/textViewName" android:clickable="false" android:focusable="false" android:focusableInTouchMode="false" android:text="" android:textAppearance="?android:attr/textAppearanceMedium" /> <ImageView android:id="@+id/imageView2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_alignParentTop="true" android:layout_marginRight="10dp" android:clickable="false" android:focusable="false" android:focusableInTouchMode="false" android:src="@drawable/bottom_arrow" /> </RelativeLayout> 

Стиль, который я определил для ListView:

 <style name="MyListView" parent="@android:style/Widget.ListView.White"> <item name="android:listSelector">@drawable/list_subject_selector</item> <item name="android:cacheColorHint">@android:color/transparent</item> <item name="android:background">@drawable/list_subject_selector</item> </style> 

И list_subject_selector drawable:

 <selector xmlns:android="http://schemas.android.com/apk/res/android"> <!-- touch down --> <item android:drawable="@drawable/list_subject_focused" android:state_pressed="true"/> <!-- selected --> <item android:drawable="@drawable/list_subject_unfocused" android:state_focused="false" android:state_pressed="false" android:state_selected="true"/> </selector> 

Я понятия не имею, почему это происходит … Я тестирую Android ICS.

Есть идеи?

Спасибо всем, Фелипе

UPDATE 1 Это код ListFragment:

 public class MyFragment extends ListFragment { private ListAdaptor adapter; private InternalDB db; Context mContext; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mContext = getActivity(); db = new InternalDB(getActivity()); } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); ArrayList<EventVO> listVO = db.getSummaryEvents(true); adapter = new ListAdaptor(mContext, R.layout.event_inflate, listVO); setListAdapter(adapter); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { LinearLayout rl = (LinearLayout) inflater.inflate(R.layout.general_list, container, false); return rl; } private class ListAdaptor extends ArrayAdapter<EventVO> { private ArrayList<EventVO> listVO; public ListAdaptor(Context context, int textViewResourceId, ArrayList<EventVO> items) { super(context, textViewResourceId, items); this.listVO = items; } @Override public View getView(int position, View convertView, ViewGroup parent) { View v = convertView; if (v == null) { v = ViewGroup.inflate(getContext(), R.layout.event_inflate, null); } final EventVO o = listVO.get(position); TextView fullName = (TextView) v.findViewById(R.id.textViewName); fullName.setText(o.getUserName()); //removed part of the code for brevity v.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { Intent i = new Intent(mContext, EventDetailsActivity.class); i.putExtra("USER_ID", o.getUserId()); startActivity(i); } }); return v; } } } 

ОБНОВЛЕНИЕ 2 Теперь это работает! Это было очень неприятно. Это я сделал, чтобы заставить его работать:

Файл xml, который я использовал для раздувания, имел:

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:clickable="true" android:focusable="true" android:focusableInTouchMode="true" > 

Я изменил на:

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent"> 

Но, я думаю, что это действительно изменило это: Внутри onActivityCreated ()

 list = getListView(); list.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { ListAdaptor la = (ListAdaptor)arg0.getAdapter(); EventVO vo = la.getItem(arg2); Intent i = new Intent(mContext, EventDetailsActivity.class); i.putExtra("USER_ID", vo.getUserId()); i.putExtra("IS_BORROWED", true); startActivity(i); } 

Важным является список строк = getListView (); Я не получал ListView через этот фрагмент кода. Я получал listView в методе onCreateView () с помощью findViewById. Я полагаю, что я потерял связь с реальным объектом ListView.

Спасибо всем, кто помог мне! 🙂

Фелипе});

Попробуйте изменить свой список. В настоящее время второй вариант можно использовать только тогда, когда элемент в вашем ListView не сфокусирован или не нажат и не выбран. Я действительно не понимаю, как вы хотите, чтобы ваш селектор выглядел, но если "@drawable/list_selector_unfocused" – это то, как вы хотите, чтобы селектор списка выглядел нормально, просто удалите все остальные атрибуты, что означает, что "@drawable/list_selector_focused" будет Используется только при нажатии кнопки.

 <selector xmlns:android="http://schemas.android.com/apk/res/android"> <!-- touch down --> <item android:drawable="@drawable/list_subject_focused" android:state_pressed="true"/> <!-- selected --> <item android:drawable="@drawable/list_subject_unfocused" /> 

Я обнаружил, что когда я добавлял макеты ListView к чистым Fragment вы ListActivity бы многие из бесплатных ListActivity и предоставляли их в фоновом режиме. Я бы посоветовал вам отказаться от использования чистого Fragment для использования ListFragment и вы можете наблюдать за всей этой удивительностью, без необходимости играть с выделенными селекторами.

Вкладка «Swell» и «Tide» в нашем приложении являются ListFragments в ViewPager и выглядят следующим образом;

ListFragment в пейджере с подсветкой (оригинальная ICS немного темнее, чем показано здесь)