无法在android中操作ListView中的列表项
我希望listView中的功能是: 1) 我想动态显示项目(由我完成) 2) 然后我想对每个列表项运行倒计时(1分钟)并显示 在文本中对每个项目进行不同的倒计时(由我完成),并在时间到期后从listView中删除该项目 3) 然后我需要在点击任何项目时显示对话框(有两个选项,接受和拒绝) 4) 然后,如果用户选择接受(从对话框),我想在文本视图中显示“已接受” 5) 或者,如果用户选择拒绝,我想在文本视图中显示“拒绝”,然后在1分钟后从列表中删除该项目(即显示拒绝的项目最多1分钟)无法在android中操作ListView中的列表项,listview,android-arrayadapter,listitem,Listview,Android Arrayadapter,Listitem,我希望listView中的功能是: 1) 我想动态显示项目(由我完成) 2) 然后我想对每个列表项运行倒计时(1分钟)并显示 在文本中对每个项目进行不同的倒计时(由我完成),并在时间到期后从listView中删除该项目 3) 然后我需要在点击任何项目时显示对话框(有两个选项,接受和拒绝) 4) 然后,如果用户选择接受(从对话框),我想在文本视图中显示“已接受” 5) 或者,如果用户选择拒绝,我想在文本视图中显示“拒绝”,然后在1分钟后从列表中删除该项目(即显示拒绝的项目最多1分钟) 公共类Mai
公共类MainActivity扩展活动{
//listview对象
私有列表视图;
//用于存储将传入适配器的数据的列表
私人名册;
//视图持有者用户从列表项中保留视图
视窗座;
//随机数
Random rand=新的Random();
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//初始化listView
lvView=(ListView)findViewById(lvItems);
//初始化列表产品
lstroost=newarraylist();
//初始化自定义适配器:传递-(上下文,列表)
final CountdownAdapter cda=新的CountdownAdapter(MainActivity.this,lstroost);
//将适配器设置为列表视图
设置适配器(cda);
//在列表上设置onlistItemClickListener
lvView.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView arg0,视图,
最终整数位置,长id){
//在这里采取行动。
//Toast.makeText(MainActivity.this,position+“Clicked”,Toast.LENGTH_SHORT.show();
//lvItems.removeViewAt(位置);
新建AlertDialog.Builder(MainActivity.this)
.setTitle(“名册”)
.setMessage(“请接受或取消花名册”)
.setPositiveButton(“接受”,新的DialogInterface.OnClickListener(){
public void onClick(DialogInterface dialog,int which){
//继续删除
Toast.makeText(MainActivity.this,“接受花名册”,Toast.LENGTH_SHORT.show();
获取(位置);
cda.notifyDataSetChanged();
}
})
.setNegativeButton(“拒绝”,新建DialogInterface.OnClickListener()){
public void onClick(DialogInterface dialog,int which){
//无所事事
//Toast.makeText(MainActivity.this,“无操作花名册将自动结束”,Toast.LENGTH_SHORT.show();
新建AlertDialog.Builder(MainActivity.this)
.setTitle(“注意”)
.setMessage(“您真的要拒绝花名册吗”)
.setPositiveButton(“是”,新的DialogInterface.OnClickListener(){
public void onClick(DialogInterface dialog,int which){
//继续删除
//
//Toast.makeText(MainActivity.this,“删除花名册”,Toast.LENGTH_SHORT.show();
1.移除(位置);
cda.notifyDataSetChanged();
}
})
.setNegativeButton(“否”,新的DialogInterface.OnClickListener(){
public void onClick(DialogInterface dialog,int which){
//无所事事
//Toast.makeText(MainActivity.this,“无操作花名册将自动结束”,Toast.LENGTH_SHORT.show();
}
})
.setIcon(android.R.drawable.ic_对话框_警报)
.show();
}
})
.setIcon(android.R.drawable.ic_对话框_警报)
.show();
//移除(位置);
//cda.notifyDataSetChanged();
}
});
//我删除了用于删除列表项的按钮,所以我在下面的代码中进行了注释
//按钮btn=(按钮)findViewById(R.id.Button);
//btn.setOnClickListener(新视图.OnClickListener(){
//@覆盖
//公共void onClick(视图v){
//对于(int i=0;i 0){
整数秒=(整数)(时间差/1000)%60;
int分钟=(int)((timeDiff/(1000*60))%60);
整小时=(整小时)((时间差/(1000*60*60))%24);
tvTimeLeving.setText(小时+小时+分钟+分钟+秒+秒);
}否则{
tvTimeRemaining.setText(“过期!!”);
tVTimemelaining.setTextColor(Color.RED);
}
}
}
}
Wow,你需要将代码编辑成类似于任何格式的东西!我不知道怎么做,我只是复制了我的代码:(然后按ENTER键我试图通过复制粘贴到文本编辑器并自动格式化来编辑它,但其中有一些奇怪的字符。你用什么来编写这段代码?现在排序。只是等待编辑被批准。我直接在这个网站的“问问题”部分键入;我从android studio复制了我的代码
public class MainActivity extends Activity {
//listview object
private ListView lvView;
//list to store data which will pass in adapter
private List lstRoster;
//view holder user to hold view from list-items
ViewHolder holder;
// forRandom number
Random rand = new Random();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//initializing listView
lvView = (ListView) findViewById(lvItems);
//initializing list Products
lstRoster = new ArrayList<>();
//initializing custome adapter :passing-(context,list)
final CountdownAdapter cda = new CountdownAdapter(MainActivity.this, lstRoster);
//setting adapter to list view
lvView.setAdapter(cda);
//setting onlistItemClickListener on list
lvView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView arg0, View view,
final int position, long id) {
//Take action here.
// Toast.makeText(MainActivity.this, position + " Clicked", Toast.LENGTH_SHORT).show();
//lvItems.removeViewAt(position);
new AlertDialog.Builder(MainActivity.this)
.setTitle("Roster")
.setMessage("Please Accept Or cancel roster")
.setPositiveButton("Accept", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
// continue with delete
Toast.makeText(MainActivity.this, "Roster Accepted", Toast.LENGTH_SHORT).show();
lstRoster.get(position);
cda.notifyDataSetChanged();
}
})
.setNegativeButton("Reject", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
// do nothing
// Toast.makeText(MainActivity.this, "No Action Roster will end automatically", Toast.LENGTH_SHORT).show();
new AlertDialog.Builder(MainActivity.this)
.setTitle("Attention")
.setMessage("Do you Really Want to Reject the roster")
.setPositiveButton("YES", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
// continue with delete
//
// Toast.makeText(MainActivity.this, "Roster Removed", Toast.LENGTH_SHORT).show();
lstRoster.remove(position);
cda.notifyDataSetChanged();
}
})
.setNegativeButton("NO", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
// do nothing
//Toast.makeText(MainActivity.this, "No Action Roster will end automatically", Toast.LENGTH_SHORT).show();
}
})
.setIcon(android.R.drawable.ic_dialog_alert)
.show();
}
})
.setIcon(android.R.drawable.ic_dialog_alert)
.show();
// lstProducts.remove(position);
// cda.notifyDataSetChanged();
}
});
//i remove button for removing list items so i commented below code
// Button btn=(Button)findViewById(R.id.button);
// btn.setOnClickListener(new View.OnClickListener() {
// @Override
// public void onClick(View v) {
// for(int i=0;i<1;i++){
// try {
// Thread.sleep(100);
//// Object toRemove = adapter.getItem(i);
//// adapter.remove(toRemove);
// if(!lstProducts.isEmpty()) {
// lstProducts.remove(i);
// cda.notifyDataSetChanged();
// }
// else {
// Toast.makeText(MainActivity.this, "No Roster in list", Toast.LENGTH_SHORT).show();
// }
// } catch (InterruptedException e) {
// e.printStackTrace();
// }
// }
// }
// });
Button add = (Button) findViewById(R.id.add);
add.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
for (int i = 0; i < 1; i++) {
try {
Thread.sleep(100);
// Object toRemove = adapter.getItem(i);
// adapter.remove(toRemove);
lstRoster.add(new Product("ID= " + rand.nextInt(100) + 1, System.currentTimeMillis() + 1000 * 60));
// lstProducts.add(new Product("O", System.currentTimeMillis() + 10000));
cda.notifyDataSetChanged();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
});
}
private class Product {
String name;
long expirationTime;
public Product(String name, long expirationTime) {
this.name = name;
this.expirationTime = expirationTime;
}
}
public class CountdownAdapter extends ArrayAdapter {
private LayoutInflater lf;
private List lstHolders;
private Handler mHandler = new Handler();
private Runnable updateRemainingTimeRunnable = new Runnable() {
@Override
public void run() {
synchronized (lstHolders) {
long currentTime = System.currentTimeMillis();
for (ViewHolder holder : lstHolders) {
holder.updateTimeRemaining(currentTime);
}
}
}
};
public CountdownAdapter(Context context, List objects) {
super(context, 0, objects);
lf = LayoutInflater.from(context);
lstHolders = new ArrayList<>();
startUpdateTimer();
}
private void startUpdateTimer() {
Timer tmr = new Timer();
tmr.schedule(new TimerTask() {
@Override
public void run() {
mHandler.post(updateRemainingTimeRunnable);
}
}, 1000, 1000);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
if (convertView == null) {
holder = new ViewHolder();
convertView = lf.inflate(R.layout.list_item, parent, false);
holder.tvProduct = (TextView) convertView.findViewById(R.id.tvProduct);
holder.tvTimeRemaining = (TextView) convertView.findViewById(R.id.tvTimeRemaining);
//buttons
// holder.btnAccept = (Button) convertView.findViewById(R.id.btn_accept);
// holder.btnReject = (Button) convertView.findViewById(R.id.btn_reject);
// holder.btnAccept.setOnClickListener(new View.OnClickListener() {
// @Override
// public void onClick(View v) {
//
//
// }
// });
// holder.btnAccept.setOnClickListener(new View.OnClickListener() {
// @Override
// public void onClick(View v) {
//
// }
// });
convertView.setTag(holder);
synchronized (lstHolders) {
lstHolders.add(holder);
}
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.setData(getItem(position));
return convertView;
}
}
private class ViewHolder {
TextView tvProduct;
TextView tvTimeRemaining;
Button btnAccept;
Button btnReject;
Product mProduct;
public void setData(Product item) {
mProduct = item;
tvProduct.setText(item.name);
updateTimeRemaining(System.currentTimeMillis());
}
public void updateTimeRemaining(long currentTime) {
long timeDiff = mProduct.expirationTime - currentTime;
if (timeDiff > 0) {
int seconds = (int) (timeDiff / 1000) % 60;
int minutes = (int) ((timeDiff / (1000 * 60)) % 60);
int hours = (int) ((timeDiff / (1000 * 60 * 60)) % 24);
tvTimeRemaining.setText(hours + " hrs " + minutes + " mins " + seconds + " sec");
} else {
tvTimeRemaining.setText("Expired!!");
tvTimeRemaining.setTextColor(Color.RED);
}
}
}
}