2016-12-09 5 views
0

У меня есть просмотр списка. Я хочу изменить цвет щелкнутой строки. Но только 0,1 и 2 индекса правильно окрашены, другие не работают должным образом, если я нажал на 4-ю строку, изменился цвет пятой строки, а иногда, если я нажал на 7-ю строку, ни одна из строк не окрашена. Пожалуйста, помогитеЭлемент Listview не работает должным образом

lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     public void onItemClick(AdapterView<?> parent, View v,final int position, long id) { 

      for (int i = 0; i < lv.getChildCount(); i++) { 
       if(position == i){ 
        lv.getChildAt(i).setBackgroundColor(Color.BLUE); 
       }else{ 
        lv.getChildAt(i).setBackgroundColor(Color.TRANSPARENT); 
       } 
      } 



    public abstract class CustomAdapter extends BaseAdapter implements SeekBar.OnSeekBarChangeListener { 
    Context context;  
    ArrayList<HashMap<String, String>> countryList;   
    ArrayList<HashMap<String, String>> mStringFilterList; 
    LayoutInflater inflter; 
    public ImageView img2,img3; 
    Handler mHandler = new Handler(); 
    SeekBar songProgressBar; 
    SelfUpdatingSeekbar self; 
    public boolean isStarted = true; 
    public static final int UPDATE_FREQUENCY = 500; 
    public static final int STEP_VALUE = 4000; 
    public final Handler handler = new Handler(); 


    public final Runnable updatePositionRunnable = new Runnable() { 
     public void run() { 
      updatePosition(); 
     } 
    }; 

    public CustomAdapter(Context applicationContext, ArrayList<HashMap<String, String>> countryList) { 
     this.context = applicationContext; 
     this.countryList = countryList; 
     mStringFilterList = countryList; 

     inflter = (LayoutInflater.from(applicationContext)); 
    } 

    @Override 
    public int getCount() { 
     return countryList.size(); 
    } 

    public void updateData(ArrayList<HashMap<String, String>> countryList) { 
     this.countryList = countryList; 
     notifyDataSetChanged(); 
    } 

    @Override 
    public Object getItem(int i) { 
     return null; 
    } 

    @Override 
    public long getItemId(int i) { 
     return 0; 
    } 

    @Override 
    public View getView(final int position, View view, ViewGroup viewGroup) { 
     view = inflter.inflate(R.layout.list_itemss, null); 

     view.setTag(position); 

     String hello = String.valueOf(countryList.get(position)); 
     String s = hello; 
     int s1 = s.lastIndexOf("="); 
     int s2 = s.lastIndexOf("}"); 

     strSub = s.substring(s1+1,s2/*s.lastIndexOf("=")*/); 

     Log.d("Hello",hello); 
     String henno1 = String.valueOf(hello.length()); 
     Log.d("hellya",strSub); 

     TextView country = (TextView) view.findViewById(R.id.textView); 
     country.setText(strSub); 

     uniqueItemIdCount = countryList.size(); 

     Log.d("PrintIdss", String.valueOf(uniqueItemIdCount)); 

     ImageView twitt = (ImageView)view.findViewById(R.id.button5); 

     twitt.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       TweetComposer.Builder builder = new TweetComposer.Builder(context) 
         .text(strSub); 

       builder.show(); 
      } 
     }); 

     ImageView fb = (ImageView)view.findViewById(R.id.button6); 

     fb.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 


       ShareLinkContent linkContent = new ShareLinkContent.Builder() 
         .setContentTitle(strSub) 
         .setContentDescription(
           "Top Hollywood Songs") 
         .setContentUrl(Uri.parse("http://www.moremovies.com/")) 
         .build(); 

       shareDialog.show(linkContent); 
      } 
     }); 




     songProgressBar = (SeekBar) view.findViewById(R.id.songProgressBar); 
     songProgressBar.setOnSeekBarChangeListener(this); 

     songCurrentDurationLabel = (TextView)view.findViewById(R.id.songCurrentDurationLabel); 
     songTotalDurationLabel = (TextView)view.findViewById(R.id.songTotalDurationLabel); 


     img2 = (ImageView)view.findViewById(R.id.button3); 


     img2.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 


       int songIndex = position; 



       String hellos = String.valueOf(countryList.get(songIndex)); 
       int s1 = hellos.lastIndexOf("="); 
       int s2 = hellos.lastIndexOf("}"); 

       String strSubs = hellos.substring(s1+1,s2/*s.lastIndexOf("=")*/); 
       selelctedFile.setText(strSubs); 

       currentSongIndex=songIndex; 

       playSong(currentSongIndex); 


      } 
     }); 
    } 
+0

использовать, если (положение == (я + 1)) { –

+0

http://stackoverflow.com/a/40821343/6756514 –

+0

не повезло !!!! его не окрашивает первый ряд !!! и если я нажму на второй строке, третий будет окрашен! –

ответ

0

Вам необходимо управлять позицией и фоном себя, потому что в вашем адаптере при повторном использовании ячейки. Просьба проверить ваш адаптер, вы его получите.

И достичь того, чего вы хотите. Вы должны обновить свой адаптер и реализовать прослушиватель кликов в представлении адаптера.

+0

right said bro .. Я в основном использую кнопку в моей строке, которая находится в адаптере. Я хочу преобразовать эту кнопку в другое изображение при нажатии кнопки! не могли бы вы помочь мне с кодом. Я обновил свой код сейчас !!! –

+0

Введите здесь код адаптера. – dhuma1981

+0

Код обновлен !!! в основном у меня есть список песен, в которых каждая строка имеет кнопку воспроизведения! Я хочу преобразовать кнопку partlyat в кнопку паузы! –

0

Try вычесть положение вашего ListView:

for (int i = 0; i < lv.getChildCount(); i++) { 
    if(position - lv.getFirstVisiblePosition() == i){ //<-Here 
     lv.getChildAt(i).setBackgroundColor(Color.BLUE); 
    }else{ 
     lv.getChildAt(i).setBackgroundColor(Color.TRANSPARENT); 
    } 
} 
0

Если вы хотите начать с кнопками воспроизведения и изменения Нажмите, чтобы приостановить один щелкнуло, и все остальные обратно играть то внутри адаптера, где вы инициализации кнопка воспроизведения/паузы:

playPause.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) {    
      lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
       public void onItemClick(AdapterView<?> parent, View v,final int position, long id) { 
        for (int i = 0; i < lv.getChildCount(); i++) { 
          Button PlayPause = v.findViewById(R.id.play_pause_button) 
          ButtonPlayPause.setImageResource("play resource") 
        } 
        playPause.setImageResource("pause resource") 
        }   
      } 
     } 
    }); 

Код может иметь некоторые ошибки синтаксиса, но вы получаете идею.

+0

lv.setOnItemClickListener (новый AdapterView.OnItemClickListener() { общественные недействительный onItemClick (AdapterView родителя, Вид v, конечное положение INT, длинный идентификатор) { для (INT I = 0; я

+0

Попробуйте: img2 находится внутри каждого дочернего элемента lv, который является View v. Итак, Button PlayPause = v.findViewById («id of img2»), а затем img2.setImageResource (R.drawable.playbutton). –

0

Вам необходимо реализовать две опции фона, поскольку адаптер будет использовать ваш макет.

Так что вам нужно отслеживать выбранные элементы (а не макеты), так как я вижу, что вы используете HashMap для заполнения вашего адаптера, чтобы создать список с выбранными позициями и когда вы заполняете свой адаптер, сделайте что-то вроде :

//Globals Variables 
List<int> SelectedList = new ArrayList<>(); 

//On select event 
SelectedList.add(position); 

//On deselect event 
SelectedList.remove(position); 


//On get view 
if(SelectedList.contains(position){ 

    // Background selected 
}else{ 
    // Explicit set the background to the default 
} 
+0

countryList.add (String.valueOf (позиция)); // Я выбираю эту строку в своем Arraylist , правильно? если да, то его не работает: / –

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