2016-06-08 9 views
0

Bei der Methode "listview.setOnItemLongClickListener" ist ein Fehler in der Ansicht "return view" aufgetreten. Der Fehler sagt, dass ein Wert von einer Methode mit dem ungültigen Ergebnistyp nicht zurückgegeben werden kann. Ich versuche, einen Warndialog zu erstellen, in dem der Benutzer benachrichtigt wird, ob er löschen möchte.Fehler im Dialogfeld "Warnung"

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); 
    } 




} 

Antwort

0

Der Aufruf return view tatsächlich in onCreate befindet. Die Funktion onCreate wird deklariert, um nichts zurückzugeben (void). Daher können Sie keine Instanz von View zurückgeben. Sie müssen nur diese Zeile entfernen oder durch return; ersetzen. Außerdem muss onItemLongClick eine boolean zurückgeben. Sie können also weder return view dort verschieben.

1

Sie versuchen, eine Sicht aus der onCreate() Methode Ihrer Aktivität zurückzugeben.

@Override 
protected void onCreate(Bundle savedInstanceState) { 

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

    //... 

    return view; 
} 

Wie Sie einen Rückgabetyp void sehen können, hat onCreate() in einer Aktivität, das heißt, Sie sollten bei dieser Methode nichts zurückkommen.

Aus dem Aussehen Ihres Codes versuchen Sie, dieses Layout als das Layout der Aktivität zu verwenden, aber Sie verwirren den Inflationscode View mit dem in der onCreateView()-Methode eines Fragments verwendeten, bei dem Sie tatsächlich eine View zurückgeben müssen. In einer Aktivität müssen Sie setContentView() aufrufen, um das Layout festzulegen. Sie können das Layout entweder mithilfe der Ressourcen-ID über setContentView(R.layout.activity_record) festlegen, oder wenn Sie die Ansicht selbst aufblasen möchten, können Sie setContentView(view) anrufen.

Verwandte Themen