2017-12-02 3 views
0

길고 짧은 두 개의 목록이 있습니다. 긴 목록 만 표시되고 짧은 목록에도있는 긴 목록의 목록 항목에는 파란색 backgroundColor가 표시됩니다. 짐작할 수 있듯이, 이것은 효과가 없습니다.ListView 항목은 onCreate의 backgroundColor를 변경하지 않지만 onItemClick을 수행합니다.

그 외에도 onItemClick 항목의 backgroundColor를 변경할 수 있습니다. 나는 경우 문 작품, 나는 텍스트 뷰에 뷰를 캐스팅 축배의 텍스트를 보여 것을 알고

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_couple_file); 

List<String> longList = new ArrayList<String>(); 
longList.add("A"); 
longList.add("B"); 
List<String> shortList = new ArrayList<String>(); 
longList.add("A"); 

//  display longList 
ListView list = (ListView) findViewById(R.id.list); 
ArrayAdapter<String> listAdapter = new ArrayAdapter<String>(this, 
android.R.layout.simple_list_item_1, longList); 
    list.setAdapter(listAdapter); 

//  look for common elements 
    for (int i = 0; i < longList.size(); i++) { 
     if (shortList.contains(longList.get(i))) { 
      View view = listAdapter.getView(i, null, list); 
//  should change the item view's color, but it doesn't 
      view.setBackgroundResource(R.color.blue); 
     } 
    } 

    registerClick(); 
} 

private void registerClick() { 
    list.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> adapterView, View viewClicked, int position, long id) { 
//  however, this does change the item view's color  
viewClicked.setBackgroundResource(R.color.red); 
    } 
} 

(이 작동합니다).

이 작업을 수행하는 데는 다른 옵션이있을 수 있지만 "A"항목의 backgroundColor가 onCreate를 변경하지 않는 이유는 알고 싶습니다 (어느 쪽도 충돌하지 않음). onItemClickListener.

편집 : 내가 (I 논리적 내 원래의 코드에서이 같이)는, setAdapter 부분의 위치와 경우 문을 전환하고, 안드로이드 스튜디오에서 알 수 있듯이 setBackgroundResource을 사용하지만, 이것이 해결되지 않는 한 문제.

+0

simple_list_item_1의 배경색을 사용하고 있기 때문에 생각합니다. 어댑터를 실행할 때까지는 설정되지 않습니다. 어댑터에서 처리되는 동안 어댑터를 변경하십시오. 또는 어댑터가 항목을 표시 한 후에 변경할 항목을 찾아서 수행 할 수 있습니다. –

답변

0

친절 ') (registerClicks'이후에 당신이 코드 ::

for (int i = 0; i < longList.size(); i++) 
{ 
     if (shortList.contains(longList.get(i))) 
     { 
      View view = listAdapter.getView(i, null, list); 
      // should change the item view's color, but it doesn't 
      view.setBackgroundColor(getResources().getColor(R.color.blue)); 
     } 
    } 

이동 :

 registerClick(); 

     for (int i = 0; i < longList.size(); i++) 
     { 
      if (shortList.contains(longList.get(i))) 
      { 
       View view = listAdapter.getView(i, null, list); 
       // should change the item view's color, but it doesn't 
       view.setBackgroundColor(getResources().getColor(R.color.blue)); 
      } 
    } 

사실 문제는, 당신은 전에 배경 변경을 요구하고 있다는 것입니다 실제로 목록보기를 나열합니다. 따라서 배경색을 변경하려는 아동의 견해가 보이지 않습니다.

편집 :

사용이 코드 :

list.post(new Runnable() { 
     @Override 
     public void run() { 
      for (int i = 0; i < longList.size(); i++) { 
       if (shortList.contains(longList.get(i))) { 
        list.getChildAt(i).setBackgroundColor(
          getResources().getColor(R.color.blue)); 
       } 
      } 
     } 
    }); 

내가 "() .post"그 목록이 생성되지 않기 때문에 우리가보기를 가져 오는하는이없이 아직 사용하고 왜 .

감사합니다. 해피 코딩!

+0

편집 된 게시물에서 볼 수있는 것처럼 내 코드의 순서가 변경되었으며 제안한 내용도 시도했지만 문제는 여전히 동일합니다. – dennis1611

+0

데니스, 네 문제를 해결했다. 내 업데이트 된 코드를 참조하십시오. –

+0

고마워요! 이것이 왜 필요한지 완전히 이해하지는 못했지만 내 문제를 해결했습니다. – dennis1611

1

list.getchildat()를 사용하여 괄호 안에 색인을 지정하면 작동합니다.