2014-05-15 2 views
0

BaseAdapter을 사용하여 ListView을 생성했습니다. 내 목록보기에 2 Button 있습니다. 행의 Button2를 클릭하면 Button1이 보이지 않도록하고 싶습니다. 그런 다음 다른 행의 Button2를 클릭하면 현재 행의 Button1을 보이지 않게 만들고 이전에 보이지 않는 Button1을 표시 할 수 있습니다. 즉 한 번에 한 행의 Button1 만 보이지 않아야합니다. 다음을 수행했지만 클릭 한 행에서 Button1의 가시성을 설정하는 방법을 모르겠습니다. 제발 나를 안내하십시오. 당신은 다른 항목 Button을 클릭 할 때 볼 수 있도록, 마지막 hidden Button보기의 보류를 유지해야BaseAdapter를 사용하여 생성 된 listview에서 한 행만 변경하는 방법은 무엇입니까?

private class ListAdapter extends BaseAdapter { 
    LayoutInflater inflater; 
    ViewHolder viewHolder; 

    public ListAdapter(Context context) { 
     // TODO Auto-generated constructor stub 
     inflater = LayoutInflater.from(context); 
    } 

    @Override 
    public int getCount() { 
     // TODO Auto-generated method stub 
     return _productlist.size(); 
    } 

    @Override 
    public Object getItem(int position) { 
     // TODO Auto-generated method stub 
     return _productlist.get(position); 
    } 

    @Override 
    public long getItemId(int position) { 
     // TODO Auto-generated method stub 
     return position; 
    } 
    private final boolean[] mHighlightedPositions = new boolean[getCount()]; 
    @Override 
    public View getView(final int position, View convertView, ViewGroup parent) { 
     // TODO Auto-generated method stub 
     if (convertView == null) { 
      convertView = inflater.inflate(R.layout.listview_row, null); 
      viewHolder = new ViewHolder(); 
viewHolder.Button1 = (Button) convertView 
    .findViewById(R.id.btn_update); 
    convertView.setTag(viewHolder); 
    viewHolder.Button2 = (Button) convertView 
    .findViewById(R.id.btn_update2); 
    convertView.setTag(viewHolder); 

     } 
     else { 
      viewHolder = (ViewHolder) convertView.getTag(); 
     } 
viewHolder.Button2.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 

       if(mHighlightedPositions[position]) { 


           viewHolder.Button1.setVisibility(convertView.INVISIBLE);  

        } 

      } 
     }); 
     return convertView; 
    } 

답변

0

다음과 같이 내 어댑터 코드입니다.

첫째,의 hidden Button

private static Button lastHiddenButton = null; 

다음을 유지하기 위해 BaseAdapter에 정적 변수를 선언 Button2에 클릭 리스너를 추가하고 Button1을 숨기고 마지막 숨겨진 Button 볼 수

final Button hideButton = placeHolder.button1; 
placeHolder.button2.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     // if the last hidden button is valid make it to visible 
     if(lastHiddenButton != null){ 
      lastHiddenButton.setVisibility(View.VISIBLE); 
      lastHiddenButton = null; 
     } 
     // hide button1 
     hideButton.setVisibility(View.GONE); 
     lastHiddenButton = hideButton; 
     } 
    }); 

이 만들 Button2을 클릭하면 Button1이 클릭 된 행에 속하는지 확인합니다.

이렇게 변경하면 재활용으로 인해 다른 행 (Buttons)도 숨길 염려가 없습니다. 이 문제를 해결하려면 내 모든 목록 항목보기가 다르다는 것을 ListView에게 알릴 필요가 있습니다. 당신이 항목의 hundreds이 때 ListView 성능에 영향을 미칠 수 있지만, 마지막으로이

을 피하기 BaseAdapter에서 getItemViewTypegetViewTypeCount을 무시하고 ListView 모든 항목 유형이 다른 볼 수 있음을 알려 수 없습니다

@Override 
public int getItemViewType(int position){ 
    // return a unique number 
    return position; 
} 

@Override 
public int getViewTypeCount() { 
    return getCount(); 
}