2014-02-14 45 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可以使列表无效 –