Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
片段访问另一个Java方法_Java_Android_Android Fragments - Fatal编程技术网

片段访问另一个Java方法

片段访问另一个Java方法,java,android,android-fragments,Java,Android,Android Fragments,我的片段注释是访问fragment To do List的delete方法,而不是执行它自己的代码行。我怎样才能纠正它?其余的方法工作正常 哪里出了问题 片段注释中的删除代码: @Override public boolean onContextItemSelected(MenuItem item) { AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item.getMen

我的片段注释是访问fragment To do List的delete方法,而不是执行它自己的代码行。我怎样才能纠正它?其余的方法工作正常

哪里出了问题

片段注释中的删除代码:

@Override
 public boolean onContextItemSelected(MenuItem item) {
    AdapterView.AdapterContextMenuInfo info =   (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
    int listpos = info.position;
    String io = list1.getItemAtPosition(listpos).toString();
    StringTokenizer s=new StringTokenizer(io);
    if (item.getTitle()=="Delete") {
        ArrayList<String> all = new ArrayList<String>();
        while (s.hasMoreTokens()) {
            all.add(s.nextToken());
        }
        Toast.makeText(getContext(), all.get(0).toString(), Toast.LENGTH_SHORT).show();
        String query = "delete from notes where heading = '"+all.get(0).toString()+"';";
        database.execSQL(query);
        //database.close();
        Intent n = new Intent(getContext(), MainActivity.class);
startActivity(n);

}
到doList的碎片代码:

 @Override
public boolean onContextItemSelected(MenuItem item) {
    AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
    int listpos = info.position;
    String io = list.getItemAtPosition(listpos).toString();
    StringTokenizer s=new StringTokenizer(io);
    if (item.getTitle()=="Delete") {
        ArrayList<String> al = new ArrayList<String>();
        while (s.hasMoreTokens()) {
            al.add(s.nextToken());

            Toast.makeText(getContext(), al.get(0).toString(), Toast.LENGTH_SHORT).show();

            String query1 = "delete from todolist where elist = '" + al.get(0).toString() + "';";
            database.execSQL(query1)

            Intent n = new Intent(getContext(), MainActivity.class);
            startActivity(n);

        }
使用.equals方法比较字符串。由于这个原因,你的if条件变假了。因此,替换

item.getTitle()=="Delete"

要比较字符串,需要使用equals或matches方法

因此,在您的情况下,您需要纠正以下if条件

if (item.getTitle().matches("Delete")) {

}
或者在另一个场景中,您可以使用

if (item.getTitle().equals("Delete")) {

}

如果getTitle返回null,item.getTitle.equalsDelete将提供NullPointerException。匹配不是用来比较精确字符串的。它是用于正则表达式的。如果getTitle返回类似于.+的值,那么您的条件将为true。请参见:Delete.matches.+返回true。@Kaushal28因此,您应该保留一个条件来检查item.getTitle!=null,然后在其中实现上述条件。另外,如果您这样写,请确保在try/catch block下编写,但不需要try-catch和额外条件:Delete.equalsitem.getTitle@正如我在你的案例中所说的,你可以使用。希望它能帮助我在todolist片段中实现该方法时==可以完美地工作。问题是notes fragment实现的是todo片段的OnContextItemSelected,而不是notes本身的OnContextItemSelected。fragment notes和todolist扩展了什么@AkshraGupta,他们也有同样的活动吗?如果是,请参阅:@AshishRanjan感谢您提供链接。虽然它没有回答我的问题,但它让我找到了另一个问题的答案。在使用片段时,我不得不使用android.view.MenuItem,而不是使用MenuItem。
if (item.getTitle().equals("Delete")) {

}