将listview时间与当前时间进行比较

时间:2017-05-16 06:32:51

标签: android listview timer

我的listview中有3个textview和1个按钮。textview中的一个包含time.I想要按钮必须在20分钟的时间点击后点击。我想比较Intime和当前时间,如果差异> 20分钟,那么按钮必须得到点击。以下是我的代码 -

MainActivity.java

public class MainActivity extends Activity  {

    TextView txtno,txtname,txtintime;
    ListView listView;
    ArrayList<Model> data;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        txtno=(TextView)findViewById(R.id.no);
        txtname=(TextView)findViewById(R.id.name);
        txtintime=(TextView)findViewById(R.id.intime);

        listView = (ListView) findViewById(R.id.list);
        data=new ArrayList<>();

        data.add(new Model(1,"ABC","11:45:50 AM"));
        data.add(new Model(2,"PQR","11:50:50 AM"));
        data.add(new Model(1,"XyZ","12:45:50 PM"));
        data.add(new Model(1,"SHjhsj","04:45:50 PM"));

        Custom c=new Custom(this,data);
        listView.setAdapter(c);
    }

}

Model.java

public class Model {

    int no;
    String name,intime;

    public Model(int no, String name, String intime) {
        this.no = no;
        this.name = name;
        this.intime = intime;
    }

    public int getNo() {
        return no;
    }

    public void setNo(int no) {
        this.no = no;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getIntime() {
        return intime;
    }

    public void setIntime(String intime) {
        this.intime = intime;
    }
}

Custom.java

public class Custom extends BaseAdapter {
    Activity a;
    ArrayList<Model> data;

    public Custom(Activity a, ArrayList<Model> data) {
        this.a = a;
        this.data = data;
    }


    @Override
    public int getCount() {
        return data.size();
    }

    @Override
    public Object getItem(int i) {
        return data.get(i);
    }

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


    public class Viewholder {
        TextView srno, name, intime;
        Button end;
    }

    @Override
    public View getView(final int i, View convertView, ViewGroup viewGroup) {
        Viewholder viewholder = null;
        if (convertView == null) {
            viewholder = new Viewholder();
            LayoutInflater li = a.getLayoutInflater();
            convertView = li.inflate(R.layout.list_item, viewGroup, false);
            viewholder.srno = (TextView) convertView.findViewById(R.id.cno);
            viewholder.name = (TextView) convertView.findViewById(R.id.cname);
            viewholder.intime = (TextView) convertView.findViewById(R.id.ctime);
            viewholder.end = (Button) convertView.findViewById(R.id.cend);
            convertView.setTag(viewholder);
        }else {
            viewholder=(Viewholder)convertView.getTag();
        }

        final Model model = data.get(i);
        viewholder.srno.setText(valueOf(data.get(i).getNo()));
        viewholder.name.setText(valueOf(data.get(i).getName()));
        viewholder.intime.setText(valueOf(data.get(i).getIntime()));



                viewholder.end.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        Toast.makeText(a, data.get(i).getName()+" Exited", Toast.LENGTH_LONG).show();
                    }
                });



        return convertView;
    }
}

activity_main.xml中

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal"
    tools:context="com.example.abc.timer.MainActivity">


    <TextView
        android:layout_width="70dp"
        android:layout_height="50dp"
        android:id="@+id/no"
        android:text="CustNo"
        android:textSize="20dp"
        android:textColor="#000"/>

    <TextView
        android:layout_width="80dp"
        android:layout_height="50dp"
        android:id="@+id/name"
        android:layout_toRightOf="@+id/no"
        android:text="Name"
        android:textSize="20dp"
        android:textColor="#000"/>

    <TextView
        android:layout_width="80dp"
        android:layout_height="50dp"
        android:id="@+id/intime"
        android:layout_toRightOf="@+id/name"
        android:text="InTime"
        android:textSize="20dp"
        android:textColor="#000"/>

    <TextView
        android:layout_width="70dp"
        android:layout_height="50dp"
        android:id="@+id/exit"
        android:text="Exit"
        android:layout_toRightOf="@+id/intime"
        android:textSize="20dp"
        android:textColor="#000"/>

    <ListView
        android:layout_width="match_parent"
        android:layout_height="400dp"
        android:layout_below="@+id/no"
        android:id="@+id/list"
        ></ListView>


</RelativeLayout>

list_item.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal" android:layout_width="match_parent"
    android:layout_height="match_parent">


    <TextView
        android:layout_width="70dp"
        android:layout_height="match_parent"
        android:id="@+id/cno"
        android:gravity="center"/>

    <TextView
        android:layout_width="70dp"
        android:layout_height="match_parent"
        android:id="@+id/cname"
        android:gravity="center"/>

    <TextView
        android:layout_width="80dp"
        android:layout_height="match_parent"
        android:id="@+id/ctime"
        android:gravity="center"/>

  <Button
      android:layout_width="90dp"
      android:layout_height="40dp"
      android:text="End"
      android:id="@+id/cend"
      android:background="#c14c4a"
      android:gravity="center"/>

</LinearLayout>

2 个答案:

答案 0 :(得分:0)

在指定的时间内使用 AlarmManager ,当前闹钟将触发您启用按钮,从而启用按钮的点击事件。

修改

你可以继续使用handler对象并使用handler.postDelayed()方法,或者你自己可以创建一个Timer对象并在该对象中安排计时器任务并完成这些工作。

答案 1 :(得分:0)

假设您知道如何将时间字符串转换为时间戳,请修改您的适配器,如下所示:

 public class Custom extends BaseAdapter {
        Activity a;
        ArrayList<Model> data;

        public Custom(Activity a, ArrayList<Model> data) {
            this.a = a;
            this.data = data;
        }


        @Override
        public int getCount() {
            return data.size();
        }

        @Override
        public Object getItem(int i) {
            return data.get(i);
        }

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


        public class Viewholder {
            TextView srno, name, intime;
            Button end;
        }

        @Override
        public View getView(final int i, View convertView, ViewGroup viewGroup) {
            Viewholder viewholder = null;
            if (convertView == null) {
                viewholder = new Viewholder();
                LayoutInflater li = a.getLayoutInflater();
                convertView = li.inflate(R.layout.list_item, viewGroup, false);
                viewholder.srno = (TextView) convertView.findViewById(R.id.cno);
                viewholder.name = (TextView) convertView.findViewById(R.id.cname);
                viewholder.intime = (TextView) convertView.findViewById(R.id.ctime);
                viewholder.end = (Button) convertView.findViewById(R.id.cend);
                convertView.setTag(viewholder);
            }else {
                viewholder=(Viewholder)convertView.getTag();
            }

            final Model model = data.get(i);
            viewholder.srno.setText(valueOf(data.get(i).getNo()));
            viewholder.name.setText(valueOf(data.get(i).getName()));
            viewholder.intime.setText(valueOf(data.get(i).getIntime()));
final Runnable r = new Runnable() {
    public void run() {
       viewholder.end.setEnabled(true);
    }
};
               if(yourObjectTimestamp - currentTimeStamp > 20){ //this u need to do on ur own
                   viewholder.end.setEnabled(true); // I assumed u know how to convert times to timestamps
    }else{
     viewholder.end.setEnabled(false);
   long timeDiffInMillis = yourObjectTimestamp - currentTimeStamp;
     handler.postDelayed(r,timeDiffInMillis );
    }


                    viewholder.end.setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View view) {
                            Toast.makeText(a, data.get(i).getName()+" Exited", Toast.LENGTH_LONG).show();
                        }
                    });



            return convertView;
        }
    }