2015-07-26 2 views
0

У меня есть список в фрагменте, и моя проблема в том, что когда я выбираю элементы в списке, тогда это нормально, но когда я просматриваю свой список, то фон элемента проверяется на наличие других элементов, но я не хочу это. Вы можете увидеть мое изображение, сначала я выбираю 3 элемента (Браузер, Календарь, Контакт), когда я просматриваю список, а затем 2 элемента (инструмент Dev, Camera) имеют измененный фон, если я продолжу прокрутку, тогда у listview есть больше таких элементов.Исходный элемент фона списка Listed при прокрутке

enter image description here enter image description here

Вот мой код:

@SuppressLint("NewApi") public class Tab2 extends Fragment{ 
    private PackageManager packageManager = null; 
    private List<ApplicationInfo> applist = null; 
    public static ApplicationAdapter listadaptor = null; 
    public static ListView list; 
    private ActionMode acMode; 
    private int counterChecked = 0; 
    private SparseBooleanArray sp; 

    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
     View v = inflater.inflate(R.layout.tab2test,container,false); 
     list = (ListView)v.findViewById(R.id.list_view2); 
     list.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE); 
     list.setItemsCanFocus(false); 
     packageManager = getActivity().getPackageManager(); 
     applist = checkForLaunchIntent(packageManager.getInstalledApplications(PackageManager.GET_META_DATA)); 
     listadaptor = new ApplicationAdapter(getActivity().getApplicationContext(),R.layout.snippet_list_row, applist); 
     list.setAdapter(listadaptor); 
     sp = list.getCheckedItemPositions(); 

     list.setOnItemClickListener(new OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> parent, View view, 
        int position, long id) { 
       //Here i set item's color and unselected color 
       view.setBackgroundColor(sp.get(position)? 0x9934B5E4: Color.WHITE); 
       if(counterChecked<1){ 
        acMode = ((AppCompatActivity) getActivity()).startSupportActionMode(mActionModeCallback); 
       } 
       String str=""; 
       int i=0; 
       for(i=0;i<sp.size();i++) 
       { 
        if(sp.valueAt(i)){ 
         str+=sp.keyAt(i)+","; 

        } 
       } 

       if(list.isItemChecked(position)){ 
        Log.d("list1", String.valueOf(position)); 
        list.setItemChecked(position, true); 
        counterChecked++; 
       }else{ 
        list.setItemChecked(position, false); 
        counterChecked--; 
       } 

       if(counterChecked<1){ 
        mActionModeCallback.onDestroyActionMode(acMode); 

       } 
      } 
     }); 

     return v; 
    } 
    private List<ApplicationInfo> checkForLaunchIntent(List<ApplicationInfo> list) { 
     ArrayList<ApplicationInfo> applist = new ArrayList<ApplicationInfo>(); 
     for (ApplicationInfo info : list) { 
      try { 
       if(isSystemPackage(info)){ 
        if (null != packageManager.getLaunchIntentForPackage(info.packageName)) { 
         applist.add(info); 
        }     
       } 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 
     return applist; 
    } 

    private boolean isSystemPackage(ApplicationInfo AInfo) { 
     return ((AInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0) ? true 
       : false; 
    } 

    private ActionMode.Callback mActionModeCallback = new ActionMode.Callback(){ 

     @Override 
     public boolean onCreateActionMode(ActionMode mode, Menu menu) { 
       MenuInflater inflater = mode.getMenuInflater(); 
       inflater.inflate(R.menu.cab_menu, menu); 
       MainActivity.toolbar.setVisibility(View.GONE); 
       return true; 
      } 

     @Override 
     public void onDestroyActionMode(ActionMode mode) { 
      mode.finish(); 
      MainActivity.toolbar.setVisibility(View.VISIBLE); 
     } 

     @Override 
     public boolean onActionItemClicked(ActionMode mode, MenuItem item) { 


      return true; 
     } 

     @Override 
     public boolean onPrepareActionMode(ActionMode arg0, Menu arg1) { 
      // TODO Auto-generated method stub 
      return false; 
     } 
    }; 
} 

ответ

0

Вы на самом деле вызвать OnItemClickListener при прокрутке, которая вызывает многократный выбор для элементов, которые вы не хотите включать.

Лучше было бы, используя checkBox внутри listView пункта и отметьте пункт, как выбрать, если вы установите флажок: проверить этот link on how to Get Selected Item Using Checkbox in Listview.

Если вы инцест на использовании onClick, то вы можете реализовать longClickListener на вашем listView Элементы, которые могут помешать получить элемент, выбранный при прокрутке, но мой совет вам должен пойти с checkBoxes.

OnLongClickListener Реализация:

listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { 

      public boolean onItemLongClick(AdapterView<?> arg0, View v, 
        int index, long arg3) { 
       // TODO Auto-generated method stub 

       String str=listView.getItemAtPosition(index).toString(); 


       return true; 
      } 
}); 
+0

Спасибо, я постараюсь с помощью флажков –

+0

NP @KenKem ..... –

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