2014-10-02 1 views
0

내가 아래에있는 내 예제에서와 같이 두 개의 이미지 중 하나에 설정 한 이미지 뷰와 아이콘의 GRIDVIEW을 만들려고 해요 기반으로 값은 sqlite 컨텐트 프로 바이더에서, 하나는 스탬프 수, 다른 하나는 최대 스탬프 수입니다.절차 상 세트 이미지 뷰는 수

뷰 홀더 패턴이있는 사용자 지정 어댑터를 사용하므로 조각에서 onLoadFinished() 모델을 설정하려고합니다. 현재 시도한 모델은 녹색 스탬프가 사용되는지 아니면 회색인지를 결정하는 값에 0 또는 1 값을 갖는 int []입니다. 그러나 GridView에 아무 것도 표시되지 않아 작동하지 않습니다.

imageSourceModel = new int[data.getInt(data.getColumnIndex(RewardsEntry.COLUMN_REW_MAX_POINTS))]; 
     int i = data.getInt(data.getColumnIndex(RewardsEntry.COLUMN_REW_POINTS)); 
     for (int j = 0; j < imageSourceModel.length; j++, i--) { 
      if (i > 0) { 
       imageSourceModel[j] = 1; 
      } else { 
       imageSourceModel[j] = 0; 
      } 
     } 
     stampGridAdapter.setModel(imageSourceModel); 

및 사용자 정의 어댑터의 코드 :

@Override 
public View getView(int i, View view, ViewGroup parent) { 
    ViewHolder viewHolder; 
    if (view == null) { 
     LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     view = inflater.inflate(R.layout.list_item_discover, parent, false); 
     viewHolder = new ViewHolder(view); 

     view.setTag(viewHolder); 
    } else { 
     viewHolder = (ViewHolder) view.getTag(); 
    } 
    if (model[i] > 0) { 
     viewHolder.stampView.setImageResource(R.drawable.ic_approved_stamp); 
    } else { 
     viewHolder.stampView.setImageResource(R.drawable.ic_approved_stamp_disabled); 
    } 
    return view; 
} 

그리고 간단한 ViewHolder :

private class ViewHolder { 
    public ImageView stampView; 

    public ViewHolder(View view) { 
     stampView = (ImageView) view.findViewById(R.id.grid_stamp_image); 
    } 
} 

하면

여기에 조각에서 onLoadFinished의 코드 조각은()이다 나는 추측해야만했다. 생성 순서 때문에 getView()가 완료되기 전에 실패했다고 말할 것이다. onLoadFinished()는 모델을 전달할 수 있습니다.이 문제를 해결하는 방법이나 내가 사용할 수있는 다른 방법을 모르겠습니다. 어떤 도움을 주셔서 감사합니다.

+0

, 사용자는 최대 수의 보상 포인트를 일정 금액 보유하고 있습니까? 네 사진에 4/9가 될까? –

+0

네, 그렇습니다. 숫자 값을 표시하기 쉽지만 사용자 친화적 인 노력으로 사용자의 '스탬프'수를 그래픽으로 나타내기를 원합니다. – fakataha

답변

1

당신이 원하는 것을 위해, 이것은 나에게 불필요한 복잡한 변수, 특히 이중 가변 루프처럼 보입니다. 간단 난 그냥이 할 거라고 잘라 : onLoadFinished에서

()를

int maxPoints = data.getInt(data.getColumnIndex(RewardsEntry.COLUMN_REW_MAX_POINTS)); 
int currentPoints = data.getInt(data.getColumnIndex(RewardsEntry.COLUMN_REW_POINTS)); 
mGridView.setAdapter(new RewardPointAdapter(getActivity(), currentPoints, maxPoints); 

어댑터가 다음과 같을 수 있습니다 : 당신이 무엇을 달성하고자하는 추측 할 수 있다고 생각

public class RewardPointAdapter extends BaseAdapter { 
    private LayoutInflater mLayoutInflater; 
    private int mMaxRewardPoints; 
    private int mCurrentRewardPoints; 

    public RewardPointAdapter(Context context, int currentRewardPoints, int maxRewardPoints) { 
     mLayoutInflater = LayoutInflater.from(context); 
     mMaxRewardPoints = maxRewardPoints; 
     mCurrentRewardPoints = currentRewardPoints; 
    } 

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

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

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

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     ViewHolder viewHolder; 
     if (convertView == null) { 
      convertView = mLayoutInflater.inflate(R.layout.list_item_discover, parent, false); 
      viewHolder = new ViewHolder(convertView); 
      convertView.setTag(viewHolder); 
     } else { 
      viewHolder = (ViewHolder) convertView.getTag(); 
     } 
     if (position < mCurrentRewardPoints) { 
      viewHolder.stampView.setImageResource(R.drawable.ic_approved_stamp); 
     } else { 
      viewHolder.stampView.setImageResource(R.drawable.ic_approved_stamp_disabled); 
     } 
     return convertView; 
    } 

    private class ViewHolder { 
     public ImageView stampView; 

     public ViewHolder(View view) { 
      stampView = (ImageView) view.findViewById(R.id.grid_stamp_image); 
     } 
    } 

} 
+0

당신은 틀린입니다! 지금은 매력처럼 작동합니다. 나는 실행 중에 발생할 수있는 잔인 함을 잘 모르기 때문에 onLoadFinished()에서 어댑터를 설정하는 것에 대해 모호하다고 생각합니다. 도움을 주셔서 감사합니다, Su-Au. – fakataha