2016-06-08 80 views
0

listview.setOnItemLongClickListener方法的「返回視圖」中存在錯誤。該錯誤表示無法從具有無效結果類型的方法返回值。我正在嘗試創建一個警告對話框,它將通知用戶是否要刪除。警報對話框中的錯誤

package com.example.user.swen; 


import android.app.AlertDialog; 
import android.app.ListActivity; 
import android.content.Context; 
import android.content.DialogInterface; 
import android.content.Intent; 
import android.os.Bundle; 
import android.text.Html; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.AdapterView; 
import android.widget.ArrayAdapter; 
import android.widget.Button; 
import android.widget.ListView; 
import android.widget.Toast; 


import java.util.ArrayList; 
import java.util.List; 



import com.example.user.swen.DB.RecordsDataSource; 
import com.example.user.swen.Model.Records; 

public class Record extends ListActivity { 

    public Button NewButton; 
    public RecordsDataSource Recordsdatasource; 
    ArrayAdapter<Records> RecordAdapter; 
    List<Records> records; 
    ListView listview; 
    Records selectedRecord; 


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


     //Referencing the Database 
     Recordsdatasource = new RecordsDataSource(this); 
     Recordsdatasource.open(); 

     LayoutInflater inflater = LayoutInflater.from(Record.this); 
     View view = inflater.inflate(R.layout.activity_record, null); 

     //set the listView to use the custom List Adapter 
     records = (List<Records>) Recordsdatasource.getAll(); 
     RecordAdapter = new RecordAdapter(this, 0, (ArrayList<Records>) records); 
     listview = (ListView) findViewById(android.R.id.list); 
     listview.setAdapter(RecordAdapter); 


     listview.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
       selectedRecord = records.get(position); 
       AlertDialog.Builder a_builder = new AlertDialog.Builder(Record.this); 
       a_builder.setMessage("Duty: " + selectedRecord.getType()) 
         .setCancelable(false) 
         .setPositiveButton("Ok", new DialogInterface.OnClickListener() { 
          @Override 
          public void onClick(DialogInterface dialog, int which) { 
          } 
         }); 
       AlertDialog alert = a_builder.create(); 
       alert.setTitle(Html.fromHtml("<font color='#08ae9e'>Information</font>")); 
       alert.show(); 


      } 
     }); 


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

       selectedRecord = records.get(position); 
       AlertDialog.Builder a_builder = new AlertDialog.Builder(Record.this); 
       a_builder.setMessage("Are you sure you want to delete?") 
         .setCancelable(false) 
         .setPositiveButton("Yes", new DialogInterface.OnClickListener() { 
          @Override 
          public void onClick(DialogInterface dialog, int which) { 
           deleteItem(selectedRecord); 
          } 
         }) 
         .setNegativeButton("No", new DialogInterface.OnClickListener() { 
          @Override 
          public void onClick(DialogInterface dialog, int which) { 
           dialog.cancel(); 
          } 
         }); 
       AlertDialog alert = a_builder.create(); 
       alert.setTitle(Html.fromHtml("<font color='#08ae9e'>Alert!!</font>")); 
       alert.show(); 
       return true; 
      } 
     }); 
     return view; 
    } 


    public void Addrecords() { 
     NewButton = (Button) findViewById(R.id.NewButton); 
     NewButton.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       Intent addrecords = new Intent(Record.this, NewRecord.class); 
       startActivity(addrecords); 
      } 
     }); 
    } 


    public static void showToast(Context context, String text) { 
     Toast.makeText(context, text, Toast.LENGTH_LONG).show(); 
    } 

    private void deleteItem(Records selectedRecord) { 
     Recordsdatasource.removeRecords(selectedRecord); 
     showToast(this, "Usage deleted"); 
     RecordAdapter.notifyDataSetChanged(); 
     RecordAdapter.notifyDataSetInvalidated(); 
     refreshDisplay(); 
    } 


    private void refreshDisplay() { 
     records = Recordsdatasource.getAll(); 
     RecordAdapter.clear(); 
     RecordAdapter.addAll(records); 
    } 




} 

回答

0

呼叫return view實際上位於onCreate。函數onCreate被聲明爲不返回(void)。因此,您無法返回View的實例。您只需刪除該行或將其替換爲return;而且,onItemLongClick必須返回boolean。所以你不能在那裏移動return view

1

您正試圖從您的活動的onCreate()方法返回視圖。

@Override 
protected void onCreate(Bundle savedInstanceState) { 

    LayoutInflater inflater = LayoutInflater.from(Record.this); 
    View view = inflater.inflate(R.layout.activity_record, null); 

    //... 

    return view; 
} 

正如你所看到的,onCreate()在活動中有一個void返回類型,這意味着你不應該在這個方法返回任何東西。

從代碼的外觀來看,您試圖將此佈局用作Activity的佈局,但是您將View通脹代碼與Fragment的onCreateView()方法中使用的代碼混淆在一起,這確實需要您返回View。

在活動中,您需要撥打setContentView()來設置佈局。您可以通過setContentView(R.layout.activity_record)使用資源ID設置佈局,或者如果您想自己膨脹視圖,則可以撥打setContentView(view)