2014-02-14 44 views
0

的條件在Adapter類的listview視圖中插入圖像我的標題可能看起來不太清楚。根據主要活動類別

由於新的Java和缺乏邏輯我想問你簡單的事情。

我有一個Activity類,其中有兩個文本視圖和一個圖像視圖的培訓列表。 OnClick到列表視圖我想在某些情況下轉到下一個活動。您可以在代碼中看到以下情況。

活動課;

public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { 

    currentTraining = (Training) arg0.getAdapter().getItem(arg2); 

    SharedMemory.getInstance().setCurrentTraining(currentTraining); 

    startTraining(); 

} 

@SuppressLint("SimpleDateFormat") 
private void startTraining() throws ParseException { 

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

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

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

    String strDateTime = trainingStartDate + " " + trainingStartTime; 

    Calendar training = Calendar.getInstance(); 

    try { 
     training.setTime(new SimpleDateFormat("MM-dd-yyyy HH:mm") 
       .parse(strDateTime)); 
    } catch (java.text.ParseException e) { 
     e.printStackTrace(); 
    } 

    // find difference in milliseconds 
    long difference = training.getTimeInMillis() - now.getTimeInMillis(); 

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

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

     finish(); 

    } else { 
     Toast.makeText(
       getApplicationContext(), 
       "The training starts on" + " " + trainingStartDate + " at " 
         + trainingStartTime, Toast.LENGTH_SHORT).show(); 
    } 

} 

要獲得這些培訓列表,我正在使用擴展TrainingAdapter的BaseAdapter。

My TrainingAdapter class;

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

    ViewHolder holder; 
    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(); 
    } 
    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()); 

    **HERE-->** holder.lockImage.setBackgroundResource(R.drawable.unlock); 

    return convertView; 
} 

static class ViewHolder { 

    TextView trainingDetails; 
    TextView txtName; 
    ImageView lockImage; 

} 

在ImageView的(lockImage)我想一個圖像設置爲訓練有時間啓動ListView和另一圖像時,訓練還沒有準備好開始。訓練開始條件可以在活動課上看到。感謝您的幫助提前..

+0

那麼你的問題是什麼。檢查條件並更換圖像? – mcd

+0

你的意思是說,在活動課裏面,如果其他條件我把兩個不同的圖像? – bShah

+0

在BaseAdapter getview方法放條件 – mcd

回答

0

好,我設法這樣回答; 在模型類中;

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; 

在activity class;

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

這將工作只爲一個項目在列表視圖你必須通過選擇 項目

public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { 

    currentTraining = (Training) arg0.getAdapter().getItem(arg2); 

    SharedMemory.getInstance().setCurrentTraining(currentTraining); 

    startTraining() 

} 

@SuppressLint("SimpleDateFormat") 
private void startTraining() throws ParseException { 

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

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

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

    String strDateTime = trainingStartDate + " " + trainingStartTime; 

    Calendar training = Calendar.getInstance(); 

    try { 
     training.setTime(new SimpleDateFormat("MM-dd-yyyy HH:mm") 
       .parse(strDateTime)); 
    } catch (java.text.ParseException e) { 
     e.printStackTrace(); 
    } 

    // find difference in milliseconds 
    long difference = training.getTimeInMillis() - now.getTimeInMillis(); 

    if (difference < 15 * 60 * 1000) { // less than 15 minutes 
     /** 
      training start 
     **/  adapter.ViewHolder.status=0;  adapter.notifydatasetchanged(); 
     Intent intent = new Intent(getApplicationContext(), 
       TraineeListActivity.class); 
     MainActivity.this.startActivity(intent); 

     finish(); 

    } else { 
     Toast.makeText(
       getApplicationContext(), 
       "The training starts on" + " " + trainingStartDate + " at " 
         + trainingStartTime, Toast.LENGTH_SHORT).show();  adapter.ViewHolder.status=1; 
    adapter.notifydatasetchanged(); 
     /** 
      training remain 
     **/ 
    } 

} 



    public View getView(int position, View convertView, ViewGroup parent) { 
     int tmp_status; 
     ViewHolder holder; 
     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=holder.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) 
     **HERE-->** holder.lockImage.setBackgroundResource(R.drawable.unlock); 
    else 
      something 
     return convertView; 
    } 

    static class ViewHolder { 

     TextView trainingDetails; 
     TextView txtName; 
     ImageView lockImage; 
     int status; 
    } 
+0

,但onClick到listView startTraining()事件將如何發生? – bShah

+0

int int如何可以在其他{}塊內。 – bShah

+0

而我無法在TrainingAdapter類中調用startTraining()方法。它要求成爲當時意圖不起作用的靜態方法。 – bShah

1

在你的活動,你必須檢查所有數據在列表中。

假設你的數據在dataArrayList,通過dataArrayList迭代,並相應地設置圖像:所有數據圖像設置

for(int i=0 ; i< data_size;i++) 
{ 
     if(ur condition) 
     { 
      //set image 1 

      obj.setImage(image1); 
     } 
     else 
     { 
      // set image 2 
      obj.setImage(image2); 
     } 
    dataArrayList.add(obj); 
} 

後,這個數據傳遞給適配器:

TrainingAdapter adapter = new TrainingAdapter(context, dataArrayList) // whtever is ypur argumnets 
listView.setAdapter(adapter); 
+0

對不起,這並沒有幫助我的情況。我的其他數據在數據庫中。當條件在列表中改變時,圖像必須自動改變。條件是startTraining()。 – bShah

+0

U可以使列表無效 –