Android-从自定义Listview中删除一个项目,并在长时间单击时进行更新

Android-从自定义Listview中删除一个项目,并在长时间单击时进行更新,android,android-listview,Android,Android Listview,在我的应用程序中,我使用的是自定义Listview,当长时间单击Listview时,我需要同时从Listview中删除一个项目以及CSV文件中相应的行 我的CSV文件如下所示 2020/11/22,晚上10:30,华氏96.3度,正常,车身 2020/11/22,晚上10:30,华氏98.2度,正常,车身 2020/11/22,晚上10:31,华氏96.7度,正常,车身 2020/11/22,晚上10:40,华氏95.0度,正常,车身 例如,如果长时间单击时删除了Listview中的第二项,则在

在我的应用程序中,我使用的是自定义Listview,当长时间单击Listview时,我需要同时从Listview中删除一个项目以及CSV文件中相应的行

我的CSV文件如下所示

2020/11/22,晚上10:30,华氏96.3度,正常,车身

2020/11/22,晚上10:30,华氏98.2度,正常,车身

2020/11/22,晚上10:31,华氏96.7度,正常,车身

2020/11/22,晚上10:40,华氏95.0度,正常,车身

例如,如果长时间单击时删除了Listview中的第二项,则在长时间单击Listview时,也应删除CSV文件中位于CSV文件上方的第二行的相应数据行。

这是我的代码:

LogViewActivity.java

public class LogViewActivity extends BaseAppCompatActivity {

    private static final String TAG = "LogViewActivity";

    private File logFile;
    private Toolbar toolbar;
    private ListView lvproducts;
    ArrayList<Product> list;
    ProductAdapter adapter;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.log_view_main);
        toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);


        ActionBar actionBar = getSupportActionBar();
        if (actionBar != null) {
            getSupportActionBar().setDisplayHomeAsUpEnabled(true);
            getSupportActionBar().setDisplayShowHomeEnabled(true);
            toolbar.setNavigationOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    finish();
                }
            });
        }



    }

    public void onResume() {
        super.onResume();


        logFile = (File) getIntent().getExtras().get(Constants.EXTRA_LOG_FILE);
        if (logFile != null) {
            toolbar.setTitle(logFile.getName());
            try {
                setLogText(logFile);
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }
        }
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu_log_view, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        Intent intent;
        switch (item.getItemId()) {
            case R.id.action_send_to:
                intent = new Intent();
                intent.setAction(Intent.ACTION_VIEW);
                intent.setDataAndType(Uri.fromFile(logFile), "text/plain");
                startActivity(intent);
                break;
            default:
                Log.e(TAG, "Unknown id");
                break;
        }
        return super.onOptionsItemSelected(item);
    }

    private void setLogText(File file) throws FileNotFoundException {

    // Textview visisbility is invisible and used only for setting up String data.

        TextView textView1 = (TextView) findViewById(R.id.tvview1);
        TextView textView2 = (TextView) findViewById(R.id.tvview2);
        TextView textView3 = (TextView) findViewById(R.id.tvview3);
        TextView textView4 = (TextView) findViewById(R.id.tvview4);
        TextView textView5 = (TextView) findViewById(R.id.tvview5);


        lvproducts = (ListView) findViewById(R.id.lvproducts);

        list =new ArrayList<Product>();


        Scanner inputStream;

        inputStream = new Scanner(file);

        while(inputStream.hasNext()){
            String line= inputStream.next();

            if (line.equals("")) { continue; } // <--- notice this line

            String[] values = line.split(",");
            String V = values[0];
            String W= values[1];
            String X= values[2];
            String Y= values[3];
            String Z= values[4];

            // Textview visisbility is invisible and used only for setting up String data.

            textView1.setText(Z);
            textView2.setText(X);
            textView3.setText(Y);
            textView4.setText(V);
            textView5.setText(W);

            Product product1 = new Product(textView1.getText().toString(), textView2.getText().toString(), textView3.getText().toString(), textView4.getText().toString(), textView5.getText().toString());

            list.add(product1);


            adapter = new ProductAdapter(LogViewActivity.this, list);
            lvproducts.setAdapter(adapter);
        }
        inputStream.close();

         lvproducts.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
        @Override
        public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {

            int which_item = position;

            new AlertDialog.Builder(LogViewActivity.this)
                    .setTitle(getResources().getString(R.string.delete_log_file_title))
                    .setMessage(getResources().getString(R.string.delete_log_file_text) + "\n"
                            + getResources().getString(R.string.file_name))
                    .setPositiveButton(android.R.string.ok,
                            new DialogInterface.OnClickListener() {
                                public void onClick(DialogInterface dialog, int which) {
                                    list.remove(which_item);
                                    adapter.notifyDataSetChanged();

                                }
                            })
                    .setNegativeButton(android.R.string.cancel, null)
                    .show();
            return true;
        }
    });



    }

}
public class Product {

    private String mode;
    private String temp;
    private String condition;
    private String dates;
    private String times;

    public Product(String mode, String temp, String condition, String dates, String times) {
        this.mode = mode;
        this.temp = temp;
        this.condition = condition;
        this.dates = dates;
        this.times = times;
    }

    public String getMode() {
        return mode;
    }

    public String getTemp() {
        return temp;
    }

    public String getCondition() {
        return condition;
    }

    public String getDates() {
        return dates;
    }

    public String getTimes() {
        return times;
    }
}
public class ProductAdapter extends ArrayAdapter<Product> {

    private final Context context;
    private final ArrayList<Product> values;

    public ProductAdapter(@NonNull Context context, ArrayList<Product> list) {
        super(context, R.layout.row_layout, list);
        this.context = context;
        this.values = list;
    }

    @SuppressLint("ResourceAsColor")
    @NonNull
    @Override
    public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {

        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View rowview = inflater.inflate(R.layout.row_layout, parent, false);

        CardView cdview = (CardView) rowview.findViewById(R.id.cdview);


        TextView tvtemp = (TextView) rowview.findViewById(R.id.tvtemp);
        TextView tvcondition = (TextView) rowview.findViewById(R.id.tvcondition);
        TextView tvdate = (TextView) rowview.findViewById(R.id.tvdate);
        TextView tvtime = (TextView) rowview.findViewById(R.id.tvtime);

        ImageView ivmode = (ImageView) rowview.findViewById(R.id.ivmode);

        tvtemp.setText(values.get(position).getTemp());
        tvcondition.setText(values.get(position).getCondition());
        tvdate.setText(values.get(position).getDates());
        tvtime.setText(values.get(position).getTimes());


        if(values.get(position).getMode().equals("Object") && (values.get(position).getCondition().equals("None")) && (!values.get(position).getTemp().equals("No-Data")))
        {
            Drawable draw8 = cdview.getResources().getDrawable(R.drawable.back_blue);
            cdview.setBackground(draw8);
            ivmode.setImageResource(R.drawable.homewhite);
        }

        else if(values.get(position).getMode().equals("Body") && (values.get(position).getCondition().equals("Normal")) && (!values.get(position).getTemp().equals("No-Data")))
        {
            Drawable draw8 = cdview.getResources().getDrawable(R.drawable.backgreen);
            cdview.setBackground(draw8);
            ivmode.setImageResource(R.drawable.headwhite);
        }

        else if(values.get(position).getMode().equals("Body") && (values.get(position).getCondition().equals("Low-Grade-Fever")) && (!values.get(position).getTemp().equals("No-Data")))
        {
            Drawable draw8 = cdview.getResources().getDrawable(R.drawable.backyellow);
            cdview.setBackground(draw8);
            ivmode.setImageResource(R.drawable.headwhite);
        }

        else if(values.get(position).getMode().equals("Body") && (values.get(position).getCondition().equals("High-Fever")) && (!values.get(position).getTemp().equals("No-Data")))
        {
            Drawable draw8 = cdview.getResources().getDrawable(R.drawable.backred);
            cdview.setBackground(draw8);
            ivmode.setImageResource(R.drawable.headwhite);
        }

        else if(values.get(position).getMode().equals("Body") && (values.get(position).getCondition().equals("None")) && (values.get(position).getTemp().equals("HIGH")))
        {
            Drawable draw8 = cdview.getResources().getDrawable(R.drawable.backred);
            cdview.setBackground(draw8);
            ivmode.setImageResource(R.drawable.headwhite);
        }

        else if(values.get(position).getMode().equals("Body") && (values.get(position).getCondition().equals("None")) && (values.get(position).getTemp().equals("LOW")))
        {
            Drawable draw8 = cdview.getResources().getDrawable(R.drawable.back_low);
            cdview.setBackground(draw8);
            ivmode.setImageResource(R.drawable.headwhite);
        }

        else if(values.get(position).getMode().equals("Body") && (values.get(position).getCondition().equals("None")) && (values.get(position).getTemp().equals("No-Data")))
        {
            Drawable draw8 = cdview.getResources().getDrawable(R.drawable.back_black);
            cdview.setBackground(draw8);
            ivmode.setImageResource(R.drawable.headwhite);
        }

        else if(values.get(position).getMode().equals("Object") && (values.get(position).getCondition().equals("None")) && (values.get(position).getTemp().equals("No-Data")))
        {
            Drawable draw8 = cdview.getResources().getDrawable(R.drawable.back_black);
            cdview.setBackground(draw8);
            ivmode.setImageResource(R.drawable.homewhite);
        }

           return rowview;
    }
}
ProductAdapter.java

public class LogViewActivity extends BaseAppCompatActivity {

    private static final String TAG = "LogViewActivity";

    private File logFile;
    private Toolbar toolbar;
    private ListView lvproducts;
    ArrayList<Product> list;
    ProductAdapter adapter;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.log_view_main);
        toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);


        ActionBar actionBar = getSupportActionBar();
        if (actionBar != null) {
            getSupportActionBar().setDisplayHomeAsUpEnabled(true);
            getSupportActionBar().setDisplayShowHomeEnabled(true);
            toolbar.setNavigationOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    finish();
                }
            });
        }



    }

    public void onResume() {
        super.onResume();


        logFile = (File) getIntent().getExtras().get(Constants.EXTRA_LOG_FILE);
        if (logFile != null) {
            toolbar.setTitle(logFile.getName());
            try {
                setLogText(logFile);
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }
        }
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu_log_view, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        Intent intent;
        switch (item.getItemId()) {
            case R.id.action_send_to:
                intent = new Intent();
                intent.setAction(Intent.ACTION_VIEW);
                intent.setDataAndType(Uri.fromFile(logFile), "text/plain");
                startActivity(intent);
                break;
            default:
                Log.e(TAG, "Unknown id");
                break;
        }
        return super.onOptionsItemSelected(item);
    }

    private void setLogText(File file) throws FileNotFoundException {

    // Textview visisbility is invisible and used only for setting up String data.

        TextView textView1 = (TextView) findViewById(R.id.tvview1);
        TextView textView2 = (TextView) findViewById(R.id.tvview2);
        TextView textView3 = (TextView) findViewById(R.id.tvview3);
        TextView textView4 = (TextView) findViewById(R.id.tvview4);
        TextView textView5 = (TextView) findViewById(R.id.tvview5);


        lvproducts = (ListView) findViewById(R.id.lvproducts);

        list =new ArrayList<Product>();


        Scanner inputStream;

        inputStream = new Scanner(file);

        while(inputStream.hasNext()){
            String line= inputStream.next();

            if (line.equals("")) { continue; } // <--- notice this line

            String[] values = line.split(",");
            String V = values[0];
            String W= values[1];
            String X= values[2];
            String Y= values[3];
            String Z= values[4];

            // Textview visisbility is invisible and used only for setting up String data.

            textView1.setText(Z);
            textView2.setText(X);
            textView3.setText(Y);
            textView4.setText(V);
            textView5.setText(W);

            Product product1 = new Product(textView1.getText().toString(), textView2.getText().toString(), textView3.getText().toString(), textView4.getText().toString(), textView5.getText().toString());

            list.add(product1);


            adapter = new ProductAdapter(LogViewActivity.this, list);
            lvproducts.setAdapter(adapter);
        }
        inputStream.close();

         lvproducts.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
        @Override
        public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {

            int which_item = position;

            new AlertDialog.Builder(LogViewActivity.this)
                    .setTitle(getResources().getString(R.string.delete_log_file_title))
                    .setMessage(getResources().getString(R.string.delete_log_file_text) + "\n"
                            + getResources().getString(R.string.file_name))
                    .setPositiveButton(android.R.string.ok,
                            new DialogInterface.OnClickListener() {
                                public void onClick(DialogInterface dialog, int which) {
                                    list.remove(which_item);
                                    adapter.notifyDataSetChanged();

                                }
                            })
                    .setNegativeButton(android.R.string.cancel, null)
                    .show();
            return true;
        }
    });



    }

}
public class Product {

    private String mode;
    private String temp;
    private String condition;
    private String dates;
    private String times;

    public Product(String mode, String temp, String condition, String dates, String times) {
        this.mode = mode;
        this.temp = temp;
        this.condition = condition;
        this.dates = dates;
        this.times = times;
    }

    public String getMode() {
        return mode;
    }

    public String getTemp() {
        return temp;
    }

    public String getCondition() {
        return condition;
    }

    public String getDates() {
        return dates;
    }

    public String getTimes() {
        return times;
    }
}
public class ProductAdapter extends ArrayAdapter<Product> {

    private final Context context;
    private final ArrayList<Product> values;

    public ProductAdapter(@NonNull Context context, ArrayList<Product> list) {
        super(context, R.layout.row_layout, list);
        this.context = context;
        this.values = list;
    }

    @SuppressLint("ResourceAsColor")
    @NonNull
    @Override
    public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {

        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View rowview = inflater.inflate(R.layout.row_layout, parent, false);

        CardView cdview = (CardView) rowview.findViewById(R.id.cdview);


        TextView tvtemp = (TextView) rowview.findViewById(R.id.tvtemp);
        TextView tvcondition = (TextView) rowview.findViewById(R.id.tvcondition);
        TextView tvdate = (TextView) rowview.findViewById(R.id.tvdate);
        TextView tvtime = (TextView) rowview.findViewById(R.id.tvtime);

        ImageView ivmode = (ImageView) rowview.findViewById(R.id.ivmode);

        tvtemp.setText(values.get(position).getTemp());
        tvcondition.setText(values.get(position).getCondition());
        tvdate.setText(values.get(position).getDates());
        tvtime.setText(values.get(position).getTimes());


        if(values.get(position).getMode().equals("Object") && (values.get(position).getCondition().equals("None")) && (!values.get(position).getTemp().equals("No-Data")))
        {
            Drawable draw8 = cdview.getResources().getDrawable(R.drawable.back_blue);
            cdview.setBackground(draw8);
            ivmode.setImageResource(R.drawable.homewhite);
        }

        else if(values.get(position).getMode().equals("Body") && (values.get(position).getCondition().equals("Normal")) && (!values.get(position).getTemp().equals("No-Data")))
        {
            Drawable draw8 = cdview.getResources().getDrawable(R.drawable.backgreen);
            cdview.setBackground(draw8);
            ivmode.setImageResource(R.drawable.headwhite);
        }

        else if(values.get(position).getMode().equals("Body") && (values.get(position).getCondition().equals("Low-Grade-Fever")) && (!values.get(position).getTemp().equals("No-Data")))
        {
            Drawable draw8 = cdview.getResources().getDrawable(R.drawable.backyellow);
            cdview.setBackground(draw8);
            ivmode.setImageResource(R.drawable.headwhite);
        }

        else if(values.get(position).getMode().equals("Body") && (values.get(position).getCondition().equals("High-Fever")) && (!values.get(position).getTemp().equals("No-Data")))
        {
            Drawable draw8 = cdview.getResources().getDrawable(R.drawable.backred);
            cdview.setBackground(draw8);
            ivmode.setImageResource(R.drawable.headwhite);
        }

        else if(values.get(position).getMode().equals("Body") && (values.get(position).getCondition().equals("None")) && (values.get(position).getTemp().equals("HIGH")))
        {
            Drawable draw8 = cdview.getResources().getDrawable(R.drawable.backred);
            cdview.setBackground(draw8);
            ivmode.setImageResource(R.drawable.headwhite);
        }

        else if(values.get(position).getMode().equals("Body") && (values.get(position).getCondition().equals("None")) && (values.get(position).getTemp().equals("LOW")))
        {
            Drawable draw8 = cdview.getResources().getDrawable(R.drawable.back_low);
            cdview.setBackground(draw8);
            ivmode.setImageResource(R.drawable.headwhite);
        }

        else if(values.get(position).getMode().equals("Body") && (values.get(position).getCondition().equals("None")) && (values.get(position).getTemp().equals("No-Data")))
        {
            Drawable draw8 = cdview.getResources().getDrawable(R.drawable.back_black);
            cdview.setBackground(draw8);
            ivmode.setImageResource(R.drawable.headwhite);
        }

        else if(values.get(position).getMode().equals("Object") && (values.get(position).getCondition().equals("None")) && (values.get(position).getTemp().equals("No-Data")))
        {
            Drawable draw8 = cdview.getResources().getDrawable(R.drawable.back_black);
            cdview.setBackground(draw8);
            ivmode.setImageResource(R.drawable.homewhite);
        }

           return rowview;
    }
}
公共类ProductAdapter扩展了ArrayAdapter{
私人最终语境;
私有最终ArrayList值;
public ProductAdapter(@NonNull上下文,ArrayList列表){
super(上下文、R.layout.row\u布局、列表);
this.context=上下文;
这个值=列表;
}
@SuppressLint(“资源色”)
@非空
@凌驾
公共视图getView(int位置,@Nullable视图convertView,@NonNull视图组父级){
LayoutFlater充气器=(LayoutFlater)context.getSystemService(context.LAYOUT\u充气器\u服务);
视图行视图=充气机。充气(R.layout.row\u布局,父级,false);
CardView cdview=(CardView)rowview.findViewById(R.id.cdview);
TextView tvtemp=(TextView)rowview.findViewById(R.id.tvtemp);
TextView-tvcondition=(TextView)rowview.findViewById(R.id.tvcondition);
TextView-tvdate=(TextView)rowview.findViewById(R.id.tvdate);
TextView tvtime=(TextView)rowview.findViewById(R.id.tvtime);
ImageView ivmode=(ImageView)rowview.findViewById(R.id.ivmode);
tvtemp.setText(values.get(position.getTemp());
setText(values.get(position.getCondition());
tvdate.setText(values.get(position.getDates());
setText(values.get(position.getTimes());
if(values.get(position).getMode().equals(“Object”)&&(values.get(position).getCondition().equals(“None”)&(!values.get(position).getTemp().equals(“无数据”))
{
Drawable draw8=cdview.getResources().getDrawable(R.Drawable.back_-blue);
cdview.立根点(图8);
设置图像资源(R.drawable.homewhite);
}
else if(values.get(position).getMode().equals(“Body”)&&(values.get(position).getCondition().equals(“Normal”)&(!values.get(position).getTemp().equals(“无数据”))
{
Drawable draw8=cdview.getResources().getDrawable(R.Drawable.backgreen);
cdview.立根点(图8);
ivmode.setImageResource(R.drawable.headwhite);
}
else if(values.get(position).getMode().equals(“Body”)&(values.get(position).getCondition().equals(“低烧”)&(!values.get(position).getTemp().equals(“无数据”))
{
Drawable draw8=cdview.getResources().getDrawable(R.Drawable.backyellow);
cdview.立根点(图8);
ivmode.setImageResource(R.drawable.headwhite);
}
else if(values.get(position).getMode().equals(“Body”)&(values.get(position).getCondition().equals(“高烧”)&(!values.get(position).getTemp().equals(“无数据”))
{
Drawable draw8=cdview.getResources().getDrawable(R.Drawable.backred);
cdview.立根点(图8);
ivmode.setImageResource(R.drawable.headwhite);
}
else if(values.get(position.getMode().equals(“Body”)&&(values.get(position.getCondition().equals(“None”)&&(values.get(position.getTemp().equals(“HIGH”))
{
Drawable draw8=cdview.getResources().getDrawable(R.Drawable.backred);
cdview.立根点(图8);
ivmode.setImageResource(R.drawable.headwhite);
}
else if(values.get(position.getMode().equals(“Body”)&&(values.get(position.getCondition().equals(“None”)&&(values.get(position.getTemp().equals(“LOW”))
{
Drawable draw8=cdview.getResources().getDrawable(R.Drawable.back\u low);
cdview.立根点(图8);
ivmode.setImageResource(R.drawable.headwhite);
}
else if(values.get(position.getMode().equals(“Body”)&&(values.get(position.getCondition().equals(“None”)&&(values.get(position.getTemp().equals(“无数据”))
{
Drawable draw8=cdview.getResources().getDrawable(R.Drawable.back_black);
cdview.立根点(图8);
ivmode.setImageResource(R.drawable.headwhite);
}
else if(values.get(position.getMode().equals(“Object”)&&(values.get(position.getCondition().equals(“None”)&&(values.get(position.getTemp().equals(“无数据”))
{
Drawable draw8=cdview.getResources().getDrawable(R.Drawable.back_black);
cdview.立根点(图8);
设置图像资源(R.drawable.homewhite);
}
返回行视图;
}
}

请帮帮我。谢谢大家!

您仅从加载的数据集中删除项,因此仅删除列表项。删除列表项时,您需要更新csv文件

 lvproducts.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
        @Override
        public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {

            int which_item = position;

            new AlertDialog.Builder(LogViewActivity.this)
                    .setTitle(getResources().getString(R.string.delete_log_file_title))
                    .setMessage(getResources().getString(R.string.delete_log_file_text) + "\n"
                            + getResources().getString(R.string.file_name))
                    .setPositiveButton(android.R.string.ok,
                            new DialogInterface.OnClickListener() {
                                public void onClick(DialogInterface dialog, int which) {
                                    list.remove(which_item);
                                    adapter.notifyDataSetChanged();
                                    updateCSVFile();

                                }
                            })
                    .setNegativeButton(android.R.string.cancel, null)
                    .show();
            return true;
        }
    });

public void updateCSVFile() {
// Write your logic her to update CSV file after item removal.
}
lvproducts.setOnItemLongClickListener(新的AdapterView.OnItemLongClickListener(){
@凌驾
公共布尔值长单击(AdapterView父项、视图、整型位置、长id){
int,其中_项=位置;
新建AlertDialog.Builder(LogViewActivity.this)
.setTitle(getResources().getString(R.string.delete_log_file_title))
.setMessage(getResources().getString(R.string.delete\u log\u file\u text)+“\n”
+getResources()。