简体   繁体   English

根据Main Activity类的条件在Adapter类的listview中插入图像

[英]Insert images in listview of Adapter class according to the condition of Main Activity class

My title might seems unclear to you. 您可能不清楚我的头衔。

Due to new in Java and lack of logic I want to ask you simple thing. 由于Java的新功能和缺乏逻辑,我想问你一个简单的问题。

I have a Activity class, where there is list of trainings with two text views and one image view. 我有一个Activity类,其中有带有两个文本视图和一个图像视图的培训列表。 OnClick to the listView I want to go to the next activity in some conditions. 在某些情况下,我想转到下一个活动。 That condition you can see below in code. 您可以在下面的代码中看到这种情况。

Activity class; 活动课;

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

}

To get these lists of training I am using BaseAdapter that extends TrainingAdapter. 为了获得这些培训列表,我正在使用扩展了TrainingAdapter的BaseAdapter。

My TrainingAdapter class; 我的TrainingAdapter类;

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;

}

In imageView (lockImage) I want to set one image to the listView that the training has time to start and another image when the training is not ready to start. 我想在imageView(lockImage)中将一个图像设置为listView,表示训练有时间开始,而另一个图像则设置为训练未准备好开始。 The training start condition can bee seen in activity class. 训练开始条件可以在活动课上看到。 Thanks for your help in advance.. 感谢您的提前帮助。

In your activity, you have to check for all data in the list. 在您的活动中,您必须检查列表中的所有数据。

Suppose your data is in dataArrayList, iterate through dataArrayList and set image accordingly : 假设您的数据在dataArrayList中,遍历dataArrayList并相应地设置image:

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);
}

After all data image is set ,pass this data to adapter : 设置所有数据映像后,将此数据传递给适配器:

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

this will work only for one item in listview you have to pass selected item 这仅适用于列表视图中的一项,您必须通过所选项

  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; } 

ok I managed to answer this way; 好吧,我设法以这种方式回答; In model class; 在模型课上;

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;  

In 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();

} }

In adapter class; 在适配器类中;

// 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);
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM