2016-02-01 2 views
1

Вопрос: Как я могу выделить опцию в 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> 

Если больше кода нужен я был бы рад предоставить.

Similar Question and Answer

Этот вопрос похож на мой, однако ответ дает мне InflateException.

Заранее благодарим за любую помощь.

ответ

0

мнение не готов в тот момент, попробуйте отправить его:

linearLayout.post(new Runnable(){ 
@override 
public void run(){ 
//your code that selects the item 
}}); 

или назвав его onViewCreated

0

Вы уверены, что clientList.setItemChecked(i, true); вызывается. Можете ли вы попробовать, добавив код, чтобы сделать выбор в методе onViewCreated.

+0

Да, метод называется «Я проверил», выполнив вход в консоль внутри этого оператора цикла/if. Даже просто размещение 'setItemChecked' внутри' onViewCreate' ничего не делает. – Jack

Смежные вопросы