-1

json 형식으로 내 서버에서 데이터를 가져옵니다. 내 Listview에 데이터를 전달하고 내가 TAG_CONFIRMATION의 데이터를 읽을 수서버 데이터를 사용하여 사용자 정의 어댑터 단일 행 변경을 사용하는 Android ListView

public class AppointmentAdapter extends BaseAdapter { 

    private Activity activity; 
    private ArrayList<HashMap<String, String>> data; 
    private static LayoutInflater inflater=null; 



    public AppointmentAdapter(Activity a, ArrayList<HashMap<String, String>> d) { 
     activity = a; 
     data=d; 
     inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     //imageLoader=new ImageLoader(activity.getApplicationContext()); 
    } 

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

    public Object getItem(int position) { 
     return position; 
    } 

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



    public View getView(int position, View convertView, ViewGroup parent) { 
     View vi=convertView; 
     if(convertView==null) 
      vi = inflater.inflate(R.layout.appointments_list_item, null); 

     TextView aid = (TextView)vi.findViewById(R.id.aid); // id 
     TextView apptitle = (TextView)vi.findViewById(R.id.apptitle); // title 
     TextView starts_date = (TextView)vi.findViewById(R.id.starts_date); // created_at 
     TextView starts_time = (TextView)vi.findViewById(R.id.starts_time); 
     TextView contact = (TextView)vi.findViewById(R.id.contact); 
     TextView confirmation = (TextView)vi.findViewById(R.id.confirmation); 
     ImageView new_appointment = (ImageView)vi.findViewById(R.id.new_appointment); 
     //CheckBox check = (CheckBox)vi.findViewById(R.id.tododone); // checkbox 

     HashMap<String, String> todo = new HashMap<String, String>(); 
     todo = data.get(position); 

     // Setting all values in listview 
     aid.setText(todo.get(AppointmentsFragment.TAG_AID)); 
     apptitle.setText(todo.get(AppointmentsFragment.TAG_APPTITLE)); 
     starts_date.setText(todo.get(AppointmentsFragment.TAG_STARTDATE)); 
     starts_time.setText(todo.get(AppointmentsFragment.TAG_STARTTIME)); 
     contact.setText(todo.get(AppointmentsFragment.TAG_CONTACT)); 
     confirmation.setText(todo.get(AppointmentsFragment.TAG_CONFIRMATION)); 
     //String test = confirmation.getText().toString(); 

     //Log.d("CONFIRMATION: ", confirmation); 
     if (confirmation.getText().toString().equals("pending")){ 
      Log.d("PASS CONFIRMATION: ", confirmation.getText().toString()); 
      new_appointment.setVisibility(View.VISIBLE); 
     } 


     return vi; 
    } 
} 

아래의 사용자 정의 어댑터를 사용하여 내 목록을 만들고이의 특정 행에 Imageview에 볼 수 설정 "pending" 동일한 경우 내 Listview. 그러나 Imageview은 모든 행에서 사용 가능합니다. 내 코드에서 무엇을 변경해야합니까? 그리고 Listview에서 특정 행 하나만 맞춤 설정하는 방법은 무엇입니까?

+0

어댑터의 기본 데이터가 변경되면 'notifiyDatasetChanged'를 사용하여 목록이 새 데이터로 업데이트되도록해야합니다. – tyczj

+0

하지만 내 데이터를 가져 오는 순간부터 초기화하고 싶습니다. 목록보기. – appLogic

+0

실제로 왜'View vi = convertView;'를하고 있는지 알고 계십니까? – njzk2

답변

0

getView 함수의 매개 변수에서 position 변수를 사용해야합니다.

getItem (int 위치)에서 전달하는 위치가 아닌 목록의 해당 인덱스에서 항목을 반환해야합니다. 따라서 멤버 변수 목록의 인덱스에서 HashMap을 반환해야합니다.

다음은 getView() 함수에서 getItem (position)을 호출하여 imageView가 활성화되어야하는 항목인지 확인하는 것입니다. 그렇지 않으면 전원을 끄십시오. 항상 켜짐 또는 꺼짐을 지정해야합니다. 그렇지 않으면보기를 다시 사용할 때 끄기로하지 않으면 여전히 켜져 있습니다. 이

if (position == rowIAmLookingFor && TAG_CONFIRMATION.equals("pending")) 
    imageView.setVisibility(View.VISIBLE); 
else 
    imageView.setVisibility(View.GONE); 

당신은 또한 ViewHolder 패턴을 조사한다 위해

이미 exacts 번호 또는 이미지 뷰를에 사용할 수 있도록 특정 롬의 위치를 ​​알고있는 경우

는 단순히 확인.

0

당신은 눈에 보이지 않는 (또는 사라)에 ImageView을 설정합니다 당신의 if(confirmation.getText().toString().equals("pending"))else 문을 추가 View.INVISIBLE 에보기를 설정하지 않습니다.

+0

)를 참조하십시오. ImageView가 내 xml 파일에서 보이지 않도록 설정되어 있습니다. – appLogic

+0

그러면 이미 볼 수있는 이미지 뷰가있는보기가 재활용 될 수 있습니다. 수표는 실패하지만 표시 여부는 '표시'로 유지됩니다. –