2014-04-17 3 views
0

FrameLayout을 만든 다음 두 개의보기 (ImageView 및 TextView)를 추가합니다. 의 getView()에프로그래밍 방식으로 추가 된보기가있는 Android ViewHolder 패턴

내 코드 :

public View getView(int position, View convertView, ViewGroup parent) { 
    ImageView imageView; 
    TextView textView1; 

    int new_width = wid/2; 
    int textview_id=0; 

    FrameLayout frame_layout = new FrameLayout(mContext); // Instantiate the parent 
    frame_layout.setLayoutParams(new GridView.LayoutParams(android.widget.FrameLayout.LayoutParams.MATCH_PARENT, 
        android.widget.FrameLayout.LayoutParams.MATCH_PARENT)); 

    textView1 = new TextView(mContext); textView1.setId(position); 
    textView1.setText("Set Wallpaper"); 
    textView1.setTextColor(mContext.getResources().getColor(R.color.set_wallpaper_colors)); 
    textView1.setVisibility(View.INVISIBLE); 
    textView1.setTypeface(textView1.getTypeface(), Typeface.BOLD); 


    FrameLayout.LayoutParams textview_params = new FrameLayout.LayoutParams(
      LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT); 
    textview_params.gravity = Gravity.CENTER; 


    FrameLayout.LayoutParams imageview_params = new FrameLayout.LayoutParams(
      new_width -5, new_width -5); 


     imageView = new ImageView(mContext); 
     //imageView.setLayoutParams(new GridView.LayoutParams(new_width - 5, new_width -5)); 
     imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); 
     imageView.setPadding(0, 0, 0, 0); 


    imageView.setImageResource(mThumbIds[position]); 

    frame_layout.addView(imageView, imageview_params); 
    frame_layout.addView(textView1, textview_params); 

    return frame_layout; 
} 

어떻게 그것이 ViewHolder 클래스를 사용하도록 변경해야합니다. 팽창시킬 레이아웃이 없습니다. 코드와

+0

과 같이해야한다. XML로부터 팽창하거나 뷰를 동적으로 생성 할 수 있습니다. 전체 getView 메소드를 게시하여 확인할 수 있습니다. –

+0

@Tim ok 코드를 게시했습니다. – mt0s

답변

1

그것은 당신이 어느 쪽이든에 홀더 패턴을 사용할 수있는이

static class ViewHolder { 
    TextView textView1; 
    ImageView imageView1; 
} 

@Override 
public View getView(final int row, View convertView, final ViewGroup parent) { 
    ViewHolder holder = null; 
    FrameLayout frame_layout = (FrameLayout) convertView; 
    if (frame_layout == null) { 
     holder = new ViewHolder(); 
     holder.textView1 = new TextView(mContext); 
     holder.imageView1 = new ImageView(mContext); 

     frame_layout.setTag(holder); 
    } 
    else { 
     holder = (ViewHolder) frame_layout.getTag();  
    } 

    holder.textView1.setText("Set Wallpaper"); 
    holder.textView1.setTextColor(mContext.getResources().getColor(R.color.set_wallpaper_colors)); 
    holder.textView1.setVisibility(View.INVISIBLE); 
    holder.textView1.setTypeface(holder.textView1.getTypeface(), Typeface.BOLD); 

    FrameLayout.LayoutParams textview_params = new FrameLayout.LayoutParams(
      LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT); 
    textview_params.gravity = Gravity.CENTER; 

    FrameLayout.LayoutParams imageview_params = new FrameLayout.LayoutParams(
     new_width -5, new_width -5); 

    holder.imageView1.setScaleType(ImageView.ScaleType.CENTER_CROP); 
    holder.imageView1.setPadding(0, 0, 0, 0); 

    holder.imageView1.setImageResource(mThumbIds[position]); 

    frame_layout.addView(holder.imageView1, imageview_params); 
    frame_layout.addView(holder.textView1, textview_params); 

    return frame_layout; 
} 
+0

코드 작업 중입니다. 나는 holder.imageview_params와 holder.textview_params와 혼동한다. 내 대답을 편집하고 내 코드를 추가하면 좀 더 자세히 설명 할 수 있습니까? – mt0s

+0

코드에서 복사 한 라인들, 나는 대답을 업데이트했다. – luddeblaesild

+0

왜 downvote? 이 코드는 코드를 따르는 올바른 방법으로 포인터 일 뿐이므로 프로그램을 작성하지 않아도됩니다. – luddeblaesild

관련 문제