2014-02-17 2 views
0

몇일 전에 내가 물었던 동일한 질문의 복사본이 될 수 있습니다. this. 거의 요구 사항을 충족시키지 만 전적으로 그렇지 않은 대답이 하나있었습니다. 나는 너희들의 관심을 끌기를 원하기 때문에 나는 이것을 다시 게시하고있다. 그 죄송합니다. 활동 클래스입니다.조건에 따라 ListView에서 이미지를 자동으로 변경하십시오.

try { 
     training.setTime(new SimpleDateFormat("MM-dd-yyyy HH:mm") 
       .parse(strDateTime)); 

     long difference = training.getTimeInMillis() 
       - now.getTimeInMillis(); 

     if (difference < 15 * 60 * 1000) { // less than 15 minutes 

      TrainingAdapter.ViewHolder.status = 1; 
      trainingAdapter.notifyDataSetChanged(); 

      Intent intent = new Intent(getApplicationContext(), 
        TraineeListActivity.class); 
      MainActivity.this.startActivity(intent); 

      finish(); 

     } else { 

      TrainingAdapter.ViewHolder.status = 1; 
      Toast.makeText(
        getApplicationContext(), 
        "The training starts on" + " " + trainingStartDate 
          + " at " + trainingStartTime, 
        Toast.LENGTH_SHORT).show(); 
     } 
    } catch (java.text.ParseException e) { 
     e.printStackTrace(); 
    } 

어댑터 클래스에서; 여기

public View getView(int position, View convertView, ViewGroup parent) { 

    ViewHolder holder; 
    int tmp_status = 0; 

    if (convertView == null) { 
     convertView = mInflater.inflate(R.layout.trainingadapter, null); 

     holder = new ViewHolder(); 
     holder.txtName = (TextView) convertView 
       .findViewById(R.id.training_title); 
     holder.trainingDetails = (TextView) convertView 
       .findViewById(R.id.training_dtls); 
     holder.lockImage = (ImageView) convertView 
       .findViewById(R.id.lockImage); 

     convertView.setTag(holder); 

    } else { 
     holder = (ViewHolder) convertView.getTag(); 
     tmp_status = ViewHolder.status; 
    } 
    holder.txtName.setText(trainingsList.get(position).getTitle()); 

    holder.trainingDetails.setText("In " 
      + trainingsList.get(position).getLocation() + " on " 
      + trainingsList.get(position).getDate() + " at " 
      + trainingsList.get(position).getStartTime() + " - " 
      + trainingsList.get(position).getEndTime() + " by " 
      + trainingsList.get(position).getTrainer()); 

    if (tmp_status == 0) { 
     System.out.println(tmp_status); 
     holder.lockImage.setBackgroundResource(R.drawable.unlock); 

    } else if (tmp_status == 1) { 
     System.out.println(tmp_status); 
     holder.lockImage.setBackgroundResource(R.drawable.lock); 
    } 

    return convertView; 
} 

static class ViewHolder { 

    TextView trainingDetails; 
    TextView txtName; 
    ImageView lockImage; 
    public static int status; 

} 

, 이미지는 INT의 tmp_status = 0의 값에 따라 변화한다;. 값을 1로 초기화하면 다른 이미지 만 제공되지만 모든 목록보기에는 표시됩니다. 활동 클래스에서 각 목록의 조건이 다른 즉 다른 활동의 의도를 볼 수 있습니다. 문제가 어디 있는지 알 수 있습니까?

+0

참고로 상태는 정적 변수이므로 클래스에 대한 인스턴스가 하나만 존재한다는 것을 의미합니다. 귀하의 TrainingAdapter.ViewHolder.status = 1; listview의 모든 행에 대해 1입니다. – Pankaj

+0

다른 listViews에서 다른 이미지를 설정할 수 있습니까? – bShah

답변

0

오케이 저는 이렇게 할 수있었습니다.

Im 모델 클래스;

public boolean isLocked() { 

    boolean returnCode = true; 
    // current date & time 
    Calendar now = Calendar.getInstance(); 

    // parse date & time from database 
    String trainingStartDate = this.getDate(); 

    String trainingStartTime = this.getStartTime(); 

    String strDateTime = trainingStartDate + " " + trainingStartTime; 

    Calendar training = Calendar.getInstance(); 

    try { 
     training.setTime(new SimpleDateFormat("MM-dd-yyyy HH:mm") 
       .parse(strDateTime)); 

     long difference = training.getTimeInMillis() 
       - now.getTimeInMillis(); 

     if (difference < 15 * 60 * 1000) { // less than 15 minutes 


      returnCode = false; 
     } 

    } catch (java.text.ParseException e) { 
     e.printStackTrace(); 
     //returnCode = false; 
    } 

    return returnCode; 
} 

활동 클래스에서;

private void startTraining() { 

    // parse date & time from database 
    String trainingStartDate = SharedMemory.getInstance() 
     .getCurrentTraining().getDate(); 

    String trainingStartTime = SharedMemory.getInstance() 
      .getCurrentTraining().getStartTime(); 

    if ((currentTraining).isLocked()){ 
     Toast.makeText(
       getApplicationContext(), 
       "The training starts on" + " " + trainingStartDate 
         + " at " + trainingStartTime, 
       Toast.LENGTH_SHORT).show(); 
    }else{ 
     Intent intent = new Intent(getApplicationContext(), 
       TraineeListActivity.class); 
     MainActivity.this.startActivity(intent); 

     finish(); 

    } 
} 

어댑터 클래스에서;

// If training is locked, then display the lock picture 
    if (trainingsList.get(position).isLocked()) { 

     holder.lockImage.setBackgroundResource(R.drawable.lock); 

     // else display the unlock picture 
    } else { 

     holder.lockImage.setBackgroundResource(R.drawable.unlock); 
    } 
0

ViewHolder에서 상태 변수를 제거하십시오. ViewHolder는보기 전용입니다. 각 행에 대해 상태를 saperatly 유지해야합니다. 정수 목록 또는 Pojo 목록 일 수 있습니다.

public View getView(int position, View convertView, ViewGroup parent) { 

    ViewHolder holder; 
    int tmp_status = 0; 

    if (convertView == null) { 
     convertView = mInflater.inflate(R.layout.trainingadapter, null); 

     holder = new ViewHolder(); 
     holder.txtName = (TextView) convertView 
       .findViewById(R.id.training_title); 
     holder.trainingDetails = (TextView) convertView 
       .findViewById(R.id.training_dtls); 
     holder.lockImage = (ImageView) convertView 
       .findViewById(R.id.lockImage); 

     convertView.setTag(holder); 

    } else { 
     holder = (ViewHolder) convertView.getTag(); 
    } 
    tmp_status = listOfStatuses.get(position); 
    holder.txtName.setText(trainingsList.get(position).getTitle()); 

    holder.trainingDetails.setText("In " 
      + trainingsList.get(position).getLocation() + " on " 
      + trainingsList.get(position).getDate() + " at " 
      + trainingsList.get(position).getStartTime() + " - " 
      + trainingsList.get(position).getEndTime() + " by " 
      + trainingsList.get(position).getTrainer()); 

    if (tmp_status == 0) { 
     System.out.println(tmp_status); 
     holder.lockImage.setBackgroundResource(R.drawable.unlock); 

    } else if (tmp_status == 1) { 
     System.out.println(tmp_status); 
     holder.lockImage.setBackgroundResource(R.drawable.lock); 
    } 

    return convertView; 
} 

static class ViewHolder { 

    TextView trainingDetails; 
    TextView txtName; 
    ImageView lockImage; 

} 
+0

그걸 제거하면 어떻게 활동 클래스에서 조건을 설정할 수 있습니까 ?? 같은 상태에서 상태가 0이고 다른 조건이 1 인 경우 – bShah

+0

마찬가지로 List의 각 위치에 대해 Integer의 ArrayList에 상태를 저장하고 geview에서 확인해야한다고합니다. – Pankaj

+0

"listOfStatuses"가 목록을 작성하여 Adapter에 전달해야합니다. – Pankaj

관련 문제