Вопрос: Как я могу выделить опцию в ListView программно?Как выбрать элемент ListView Programmatically
Фон: Я рассмотрел тонны нитей для такого рода проблем, однако ни один из них не работает. У меня есть представление списка в фрагменте, который заполняется списком, созданным из базы данных, с использованием пользовательского адаптера. Когда фрагмент открыт, я хотел бы, чтобы один из элементов был выбран по умолчанию (в зависимости от того, включен ли режим редактирования 1/включен), у меня есть позиция этого элемента. В настоящее время я использую clientList.setChoiceMode(ListView.CHOICE_MODE_SINGLE)
, и попробуйте выделить параметр с setItemChecked
, но он не работает.
Фрагмент OnCreate
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
FragmentActivity faActivity = (FragmentActivity) super.getActivity();
final LinearLayout linearLayout = (LinearLayout) inflater.inflate(R.layout.fragment__client, container, false);
addJob = (AddJob)getActivity();
clientList = (ListView) linearLayout.findViewById(R.id.listView);
clientList.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
dbHandler = new DraycottDataHandler(super.getActivity().getApplicationContext());
if (dbHandler.getClientCount() != 0)
Clients.addAll(dbHandler.getAllClients()); //Loads clients into Client list
populateList(); //Sets adapter for the listview.
if(addJob.getEdit() == 1) { //Get edit mode from activity
NewJobClass editJob = addJob.getEditJob();
for (int i = 0; i < Clients.size(); i++) {
ClientClass client = Clients.get(i);
if (client.getID() == editJob.getClientID()) {
clientList.setItemChecked(i, true); //Highlight item (doesnt do anything).
}
}
}
clientList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
selectedClient = Clients.get(position);
listener.getClientData(selectedClient);
}
});
return linearLayout;
}
ListView XML
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
android:orientation="vertical"
tools:context="com.simple.jack.application.Fragment_Client">
<ListView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/listView"
android:choiceMode="singleChoice"
android:listSelector="#D3D3D3"
android:clickable="true"/>
</LinearLayout>
Если больше кода нужен я был бы рад предоставить.
Этот вопрос похож на мой, однако ответ дает мне InflateException.
Заранее благодарим за любую помощь.
Да, метод называется «Я проверил», выполнив вход в консоль внутри этого оператора цикла/if. Даже просто размещение 'setItemChecked' внутри' onViewCreate' ничего не делает. – Jack