2012-05-31 5 views
3

목록보기가있는 앱이 있습니다. listview 잘 작동합니다. 문제가 시작되면서 표시된 행의 일부부터 목록을 시작합니다. 내가 누를 때 행을 표시 할 수 있습니다. 그러나 초기화 할 때 행을 표시하는 방법을 찾지 않는 것 같습니다.ListView에서보기를 표시하는 방법은 무엇입니까?

내가 그것을 어떻게

listViewOfBluetooth = getListView(); 
setInitialEnabledDevices(); 
    listViewOfBluetooth.setOnItemClickListener(new OnItemClickListener() { 

    public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
     String chosenBluetoothDevice = (String) ((TextView) view).getText(); 

     BluetoothEnableOrDisable(view, chosenBluetoothDevice); 
     Toast.makeText(getApplicationContext(), chosenBluetoothDevice, Toast.LENGTH_SHORT).show(); 
     editor.putString("bluetooth_name_from_list1", chosenBluetoothDevice); 
     editor.putBoolean("have_the_cars_bluetooth", true); 
     editor.commit(); 
     Intent intent = new Intent(List.this, ParkOGuardActivity.class); 
     startActivity(intent); 
     } 
    }); 
} 

public static void setInitialEnabledDevices(){ 
    int length = listViewOfBluetooth.getChildCount(); 
    View view = null; 
    String first = prefs.getString("bluetooth_name_from_list0", ""); 
    String second = prefs.getString("bluetooth_name_from_list1", ""); 
    String third = prefs.getString("bluetooth_name_from_list2", ""); 
    for(int i = 0; i < length; i++){ 
     view = listViewOfBluetooth.getChildAt(i); 
     if(view.equals(first) || view.equals(second) || view.equals(third)) { 
      view.setBackgroundColor(Color.GRAY); 
     } 
    }  
} 
을 를 해결할 수 :

이 내 코드?

감사합니다.

+0

어떤 어댑터를 사용하고 있습니까? – Shaiful

+0

나는 listadapter를 사용한다 : setListAdapter (new ArrayAdapter (this, R.layout.list, arrayOfBluetoothDevicesNames)); – roiberg

+0

ArrayAdapter를 확장하는 어댑터를 만드는 이유는 무엇입니까? 그리고 getView() 메소드를 대체하십시오. – IvoryCirrus

답변

4

사용자 지정 어댑터를 사용하여이 작업을 수행 할 수 있습니다. 해결 방법은 다음과 같습니다.

  • 가 표시된 장치 이름에 대한 몇 가지 플래그를 추가 사용자 정의 어댑터
  • 를 초기화합니다.
  • 플래그를 확인하여 getView() &을 덮어 씁니다. 그에 따라 목록 항목의 배경을 설정하십시오.

답장을받지 못하거나 복잡한 점이 있으면 알려주십시오.

업데이트 : 여기

은 샘플 어댑터입니다. 나는 코드를 컴파일하지 않았다. 따라서 약간의 오류가있을 수 있습니다.

import java.util.ArrayList; 

import android.content.Context; 
import android.graphics.Color; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.BaseAdapter; 
import android.widget.TextView; 

public class TestAdapter extends BaseAdapter 
{ 
    ArrayList<String> deviceNames; 
    ArrayList<Boolean> selected; 
    Context context; 

    public TestAdapter(Context context) 
    { 
     this.context = context; 
     deviceNames = new ArrayList<String>(); 
     selected = new ArrayList<Boolean>(); 
    } 

    public void addDeviceToList(String deviceName, boolean isSelected) 
    { 
     deviceNames.add(deviceName); 
     selected.add(isSelected); 
     notifyDataSetChanged(); 
    } 

    public int getCount() 
    { 
     return deviceNames.size(); 
    } 

    public Object getItem(int position) 
    { 
     return deviceNames.get(position); 
    } 

    public long getItemId(int position) 
    { 
     return position; 
    } 

    public View getView(int position, View convertView, ViewGroup parent) 
    { 
     TextView tv = new TextView(context); 
     tv.setText(deviceNames.get(position)); 
     if(selected.get(position) == true) 
     { 
      tv.setBackgroundColor(Color.parseColor("#ff0000")); 
     } 
     return tv; 
    } 
} 

이제 어댑터 객체를 생성하고 어댑터를 listView로 설정하십시오. 그리고 addDeviceToList() 메서드를 호출하여 단일 항목을 추가하십시오.

+0

메신저 여기에 새 ... 그래서 나에게 분명하지 않다. 나는 약간의 코드를 보여줄 수 있으면 좋겠지 만 그 코드를 많이 요구한다면 이해할 것이다. – roiberg

+0

나는 코드를 게시했다. 도움이되는지 확인하십시오. – Shaiful

0
불쾌한 보인다

하지만 난 당신이로드하기 전에 목록보기 내부의 전망을 수정할 생각이

것은입니다, 목록은 긴 목록이 사용자에게 표시되지 않는 아이들이되지 않습니다 .so를 사용하면 사용자

에 표시하기 전에보기를 수정할 수 없습니다하지만 당신은 정말 낮은 수준에서 전망과 통신해야 할 경우 당신은 당신의 목록에 스크롤 리스너를 연결을 시도 할 수 있습니다 :

@Override 
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { 
    for (int i = 0; i < visibleItemCount; i++) { 
     View child = getChildAt(i); 
     Now edit this view 

    } 
} 
관련 문제