2017-12-11 8 views
-1

사용자 정의 행이있는 ListView입니다. 그들은는 ArrayAdaptergetView() 방법 IND 설정 다른 배경 색상을 가지고 : 행에Android ListView에서 간단한 애니메이션으로 행 강조 표시

public View getView(int position, View convertView, ViewGroup parent) { 
    ... 
    bgResourceId = R.color.white; 
    if (items.get(position).status.contentEquals("ok")) { 
     bgResourceId = R.color.green; 
    } else items.get(position).status.contentEquals("error")) { 
     bgResourceId = R.color.red; 
    } 
    row.setBackgroundResource(bgResourceId); 
    return row; 
} 

클릭하면 새로운 활동을 시작합니다. 새로운 액티비티를 마친 후에 우리는 ListView으로 활동으로 돌아가고 그 시점에서 나는 행 중 하나를 강조해야합니다.

onResume() 방법 내부를 터치하거나 클릭하지 마세요. 어떤 행 (색인)이 highlihgted가되는지 알 수 있습니다.

간단한 애니메이션 - 1 초 동안 깜박일 수 있으며 그 후에는 원래 배경색으로 돌아갑니다. 이 같은 뭔가 :

enter image description here

는 것이 가능할까요?

+2

* 그게 가능 * ... 예, 그것은 – Selvin

+0

팔로우이다 [이] (https://stackoverflow.com/questions/ 5058291/highlight-listview-selected-row)보기에 사용자 정의 애니메이션을 추가하십시오. – ADM

+0

고마워요 @ 셀빈, 지금, 제발 어떻게 할 수 있니? – Dusan

답변

0

이렇게 보일 정도로 사소한 것은 아닙니다. 당신은해야한다

  1. 타이밍이 맞는지 확인하십시오. onResume을 사용하면 아직 항목보기에 액세스 할 수 없으므로 onWindowsFocusChanged을 사용해야합니다. 활동이 넣어 :

    Handler handler = new Handler(); 
    int blink = 4; 
    int regularBg = android.R.color.holo_orange_light; 
    int blinkingBg = android.R.color.holo_orange_dark; 
    
    @Override 
    public void onWindowFocusChanged(boolean hasFocus) { 
        super.onWindowFocusChanged(hasFocus); 
        if (hasFocus) { 
         final View view = adapter.getViewByPosition(blink, listView); 
         view.setBackgroundResource(blinkingBg); 
         handler.postDelayed(new Runnable() { 
          @Override 
          public void run() { 
           view.setBackgroundResource(regularBg); 
           listView.setOnScrollListener(null); 
          } 
         }, 1000); 
        } 
    } 
    
  2. 액세스 항목 뷰를 사용하면 어댑터에 추가 사용자 정의 메소드를 통해 (일반 getView을 통해 작동하지 않습니다). 그것은 here에서 온 것입니다.

    View getViewByPosition(int pos, ListView listView) { 
        final int firstListItemPosition = listView.getFirstVisiblePosition(); 
        final int lastListItemPosition = firstListItemPosition + listView.getChildCount() - 1; 
    
        if (pos < firstListItemPosition || pos > lastListItemPosition) { 
         return listView.getAdapter().getView(pos, null, listView); 
        } else { 
         final int childIndex = pos - firstListItemPosition; 
         return listView.getChildAt(childIndex); 
        } 
    } 
    
  3. 모든 상황에서 강조 표시하려는 항목이 표시되는지 확인하십시오. 보장 할 수없는 경우 매우 작은 장치가 있거나 강조 표시하려는 항목이 질문에 표시 한 목록보다 목록에서 더 내려 가기 때문에 올바른 위치로 먼저 스크롤해야합니다. 스크롤이 끝난 후에 만 ​​항목 배경을 안전하게 변경할 수 있습니다. 따라서 ListView에 대해 onScrollListener을 구현해야합니다. 지금 당장 당신이 달리 말하기 전까지는 이것이 필요 없다고 생각합니다. 여기

는 모습입니다 :

enter image description here

+0

사실 나는 onResume()에서 올바른 위치로보기를 스크롤하고 있습니다. 한번 시도해보고 알려 드리겠습니다. – Dusan

+0

정확히 상상하지는 못했지만 좋은 시작점입니다. 도와 줘서 고마워. – Dusan