Java 找不到从SharedReferences中删除项目的方法

Java 找不到从SharedReferences中删除项目的方法,java,android,android-studio,sharedpreferences,baseadapter,Java,Android,Android Studio,Sharedpreferences,Baseadapter,我正在尝试从任务列表中删除连接到SharedReferences的项目。 我设法删除了所有项目,但问题是我找不到连接计数器的方法,无法从具有开关的列表中删除单个项目,当此开关为true时,我需要按索引号从列表中删除项目 public class TaskAdapter extends BaseAdapter { //transfer context Context context; //transfer user to use for shared preferences String user

我正在尝试从任务列表中删除连接到SharedReferences的项目。 我设法删除了所有项目,但问题是我找不到连接计数器的方法,无法从具有开关的列表中删除单个项目,当此开关为true时,我需要按索引号从列表中删除项目

public class TaskAdapter extends BaseAdapter {
//transfer context
Context context;
//transfer user to use for shared preferences
String userName;
//create a list of tasks.....
List<taskItem> myTasks;
Calendar calendar = Calendar.getInstance();
PendingIntent pendingIntent;
int pos;

//constructor, for creating the adapter we need from the user context and userName
public TaskAdapter(Context context, String userName) {
    this.context = context;
    this.userName = userName;
    //go to user shared preferences and fill the list
    getData();
    notifyDataSetChanged();

}
//how many item to display
@Override
public int getCount() {
    //return the myTasks size....
    return myTasks.size();
}

//return a specific item by index
@Override
public Object getItem(int i) {
    return myTasks.get(i);
}

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

//create our view
@Override
public View getView(final int index, final View view, ViewGroup viewGroup) {
    //inflate the view inside view object -> viewInflated
    final View viewInflated = LayoutInflater.from(context).inflate(R.layout.task_item, null, false);
    //set our inflated view behavior

    //set pointer for our inflated view

    //set pointer for task name....
    final TextView txtTaskName = (TextView) viewInflated.findViewById(R.id.taskName);
    //set pointer for taskInfo
    final TextView txtTaskInfo = (TextView) viewInflated.findViewById(R.id.taskInfo);
    //set pointer for task status....
    final Switch swTask = (Switch) viewInflated.findViewById(taskDone);

    //set task name, by the index of my myTasks collection
    txtTaskName.setText(myTasks.get(index).taskName);
    //set task info, by index of myTasks collection
    txtTaskInfo.setText(myTasks.get(index).taskInfo);
    //set task status , switch is getting true/false
    swTask.setChecked(myTasks.get(index).taskStatus);

    //show date and time dialog
    final ImageView dtPicker = (ImageView) viewInflated.findViewById(R.id.imgTime);
    dtPicker.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            final AlertDialog.Builder ad = new AlertDialog.Builder(context);
            final AlertDialog aDialog = ad.create();
            final LinearLayout adLayout = new LinearLayout(context);
            adLayout.setOrientation(LinearLayout.VERTICAL);
            TextView txtTime = new TextView(context);
            txtTime.setText("Choose time");
            adLayout.addView(txtTime);

            final TimePicker tp = new TimePicker(context);
            adLayout.addView(tp);
            final DatePicker dp = new DatePicker(context);
            tp.setVisibility(View.GONE);
            adLayout.addView(dp);


            final Button btnNext = new Button(context);
            btnNext.setText("Next>");
            adLayout.addView(btnNext);
            btnNext.setGravity(1);

            Button btnCancel = new Button(context);
            btnCancel.setText("Cancel");
            adLayout.addView(btnCancel);
            btnCancel.setGravity(1);


            btnCancel.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    aDialog.cancel();
                }
            });
            btnNext.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    final int hour = tp.getHour();
                    final int min = tp.getMinute();

                    final String myHour = String.valueOf(hour);
                    final String myMin = String.valueOf(min);


                    calendar.set(Calendar.MONTH, dp.getMonth());
                    calendar.set(Calendar.YEAR, dp.getYear());
                    calendar.set(Calendar.DAY_OF_MONTH, dp.getDayOfMonth());
                    dp.setVisibility(View.GONE);
                    tp.setVisibility(View.VISIBLE);
                    btnNext.setText("Finish");
                    btnNext.setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View v) {
                            AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
                            calendar.set(Calendar.HOUR_OF_DAY, tp.getHour());
                            calendar.set(Calendar.MINUTE, tp.getMinute());
                            Intent my_intent = new Intent(context, RingtonePlayingService.class);
                            pendingIntent = PendingIntent.getService(context, 0, my_intent, PendingIntent.FLAG_UPDATE_CURRENT);
                            alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent);
                            if(hour > 12){
                                String myHour = String.valueOf(hour - 12);
                            }

                            if(min < 10)
                            {
                                String myMin = "0"+String.valueOf(min);
                            }

                            Toast.makeText(context, "Set for- "+tp.getHour()+":"+tp.getMinute() , Toast.LENGTH_LONG).show();
                            aDialog.cancel();
                        }
                    });
                }
            });
            aDialog.setView(adLayout);
            aDialog.show();
        }
    });

    //create listener event, when switch is pressed
    swTask.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            //we using utlShared to update task status
            //create instance of utlShared
            utlShared myShared = new utlShared(context);
            //calling method of task, and giving userName(shared preferences, taskName, taskStatus)
            myShared.task(userName, txtTaskName.getText().toString(), txtTaskInfo.getText().toString(), swTask.isChecked());
            //we sending a message to the user, and inform him/her about the change
            Toast.makeText(context, swTask.isChecked() ? "Task done" : "Task undone", Toast.LENGTH_SHORT).show();

        }
    });

    //return the view with the behavior.....
    return viewInflated;
}

private void getData() {
    //go to specific shared preferences by user name.....
    SharedPreferences taskPref = context.getSharedPreferences(userName, context.MODE_PRIVATE);
    //create instance of our myTasks list
    myTasks = new ArrayList<>();


        Map<String, ?> tasks = taskPref.getAll();
        for (Map.Entry<String, ?> oneTask : tasks.entrySet()) {
            //insert task to list by Key and Value, we check if value is equal to 1, becuase 1=true 0=false
            for(int pos=0 ; pos<myTasks.size() ; pos++){
                myTasks.get(pos);
            }
            String[] str = oneTask.getValue().toString().split(",");
            myTasks.add(new taskItem(str[0], str[1], str[2].equals("1")));
        }

}
}

这个方法是从我的Welcome类调用的,它是

public class Welcome extends AppCompatActivity {

String userName;
Context context;
utlShared myUtl;
ListView taskList;
String taskName;
String taskInfo;
boolean taskDone;
AlarmManager alarmManager;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_welcome);
    setPointer();


}

private void setPointer()
{

    this.context=this;
    userName=getIntent().getStringExtra("userName");
    myUtl = new utlShared(context);
    taskList=(ListView)findViewById(R.id.taskList);
    setListData();
    alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);
    Toast.makeText(Welcome.this, "welcome user:"+userName, Toast.LENGTH_SHORT).show();
    Button btnBack = (Button)findViewById(R.id.btnBack);
    FloatingActionButton btnDelete=(FloatingActionButton)findViewById(R.id.btnDelete);

    btnDelete.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            myUtl.clearTasks(userName, taskName, taskInfo, taskDone);
            setListData();
        }
    });

    btnBack.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(context, MainActivity.class);
            startActivity(intent);
            finish();
        }
    });



}

private void setListData() {
    final TaskAdapter adapter = new TaskAdapter(context, userName);
    taskList.setAdapter(adapter);
}

public void addCustomTask(View view)
{
    //create builder
    AlertDialog.Builder builder = new AlertDialog.Builder(context);
    //set title
    builder.setTitle("Add new task!");


    //inflate view from layout ->custom layout,null,false as defualt values
    View viewInflated= LayoutInflater.from(context).inflate(R.layout.dlg_new_task,null,false);

    final EditText txtCustomLine = (EditText)viewInflated.findViewById(R.id.txtHLine);
    final EditText txtCustomTask = (EditText)viewInflated.findViewById(R.id.txtTask);

    builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialogInterface, int i) {
            dialogInterface.dismiss();
        }
    });

    builder.setPositiveButton("Add task", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialogInterface, int i) {
            dialogInterface.dismiss();

            String myTaskCustom = txtCustomTask.getText().toString();
            String myTaskLine = txtCustomLine.getText().toString();
                myUtl.task(userName, myTaskCustom, myTaskLine, false);
                setListData();
        }
    });


    //display our inflated view in screen
    builder.setView(viewInflated);
    //show the dialog
    builder.show();

}
}

抱歉代码太长,但我在这个问题上花了太多时间,没有找到一个正常的方法来解决它


提前感谢各位,非常感谢

我想我的问题还不够清楚,但我已经找到了一种方法

taskEditor.remove('item tag');
taskEditor.commit();
if(!taskDone){
        String myData = taskName+","+taskInfo+","+(taskDone?"1":"0");
        taskEditor.putString(taskName,myData);
        //apply the changes
        taskEditor.commit();
    }
    else
    {
        taskEditor.remove(taskName);
        taskEditor.commit();
        adapter.notifyDataSetChanged();
    }
尽管它并不完美,因为我可以在更新编辑器后刷新视图,并且只有在重新启动应用程序后,我上次删除的任务才会消失


干杯,谢谢大家

为什么不使用像SugarORM这样的工具呢?使用它,你可以在一行中删除/添加和选择用户。请参阅此链接。我认为它可以帮助你解决问题。我正在查看这个家伙的代码,有点乱,但我会很快尝试,谢谢,我会给出答案,希望这会有所帮助。虽然这个代码片段可能会解决这个问题,但它确实有助于提高您的文章质量。请记住,您将在将来回答读者的问题,这些人可能不知道您的代码建议的原因。
if(!taskDone){
        String myData = taskName+","+taskInfo+","+(taskDone?"1":"0");
        taskEditor.putString(taskName,myData);
        //apply the changes
        taskEditor.commit();
    }
    else
    {
        taskEditor.remove(taskName);
        taskEditor.commit();
        adapter.notifyDataSetChanged();
    }