2012-12-04 2 views
1

이미 GridViews 및 ViewHolders에 대해 많이 읽었지만 아무 것도 도움이되지 않습니다. 만약 그게 가능하다면, 아니면 그냥 관리 할 수 ​​없다면. 문제점 : GridView는 사용자가 숫자를 입력하면 TextView를 포함하거나 가능한 숫자의 연필 표식을 표시하기 위해 다른 GridView를 포함 할 수있는 Sudokufield를 나타냅니다. 아이디어 : GridView 및 TextView를 보유하고있는 ViewHolder. TextView의 텍스트가 비어 있으면 연필 모양이 GridView에 표시되어야합니다. 그렇지 않으면 번호가있는 TextView가 표시되어야합니다. 어댑터 Heres는 내 코드 : (아마도 레이아웃 몇 가지 문제가있다는 완전히 직관적이지 -.-?)ViewHolder를 통해 GridView에서보기를 변경할 수 있습니까?

편집 : 세포는 각 필드의 시작 뷰를 정의 뷰의 배열. 따라서 필드 x가 이미 숫자 인 경우 셀 [x]에는 텍스트 세트 y가 포함 된 텍스트 뷰가 포함됩니다. 어떤 답을

public class ViewAdapter extends BaseAdapter{ 
Context context; 
View[] cells; 
int size; 

public ViewAdapter(Context context, View[] cells, int size) { 
    this.context = context; 
    this.cells = cells; 
    this.size = size; 
} 

public int getCount() { 
    return 81; 
} 

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

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

public View getView(int position, View target, ViewGroup parent) { 
    ViewHolder holder; 
    if (target == null) { 
     LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     target = inflater.inflate(R.layout.activity_game, parent, false); 
     holder = new ViewHolder(); 
     if (cells[position] instanceof GridView) { 
      holder.gv = (GridView)cells[position]; 
      holder.tv = new TextView(context); 
      holder.tv.setText(""); 
     } else if (cells[position] instanceof TextView){ 
      holder.gv = new GridView(context); 
      holder.gv.setNumColumns(3); 
      holder.gv.setClickable(false); 
      holder.tv = (TextView)cells[position]; 
     } 
     target.setTag(holder); 
    } else { 
     holder = (ViewHolder)target.getTag(); 
    } 

    GridView gv = holder.gv; 
    gv.setBackgroundColor(Color.WHITE); 
    gv.setLayoutParams(new GridView.LayoutParams(20, 20));  

    TextView tv = holder.tv; 
    tv.setGravity(Gravity.CENTER); 
    tv.setLayoutParams(new GridView.LayoutParams(LayoutParams.MATCH_PARENT, size));  
    tv.setBackgroundColor(Color.WHITE); 
    tv.setTextAppearance(context, android.R.style.TextAppearance_Large); 

    return target; 
} 

class ViewHolder { 
    GridView gv; 
    TextView tv; 
} 
} 

잰 접견 감사 (전은 조금 추한하지만 메신저있는 GridViews에 익숙하고 :(많은 문제가없는 추측)

답변

0

내가 솔루션 나 자신을 발견 좋아. 나는 단지 TextView를 사용하고 3- 라인 텍스트로 연필 마크를 찍으십시오. 이것은 내가 찾은 가장 쉬운 방법입니다. 그러나 Views 간의 전환이 가능한지 계속 알고 싶습니다.

관련 문제