2016-06-08 2 views
0

listview.setOnItemLongClickListener 메소드의 'return view'에 오류가 있습니다. 오류 메시지는 결과 유형이 void 인 메소드에서 값을 반환 할 수 없다고 말합니다. 사용자에게 삭제할지 여부를 알리는 알림 대화 상자를 만들려고합니다.경고 대화 상자의 오류

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;으로 바꾸기 만하면됩니다. onItemLongClickboolean을 반환해야합니다. 따라서 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 반환 타입을 가지고있다.

코드 모양에서이 레이아웃을 활동 레이아웃으로 사용하려하지만보기의 인플레이션 코드가 조각의 onCreateView() 메소드에서 사용 된 코드와 혼동을 일으 킵니다. 실제로보기를 반환해야합니다.

액티비티에서는 setContentView()으로 전화하여 레이아웃을 설정해야합니다. setContentView(R.layout.activity_record)을 통해 리소스 ID를 사용하여 레이아웃을 설정할 수도 있고 직접보기를 부 풀릴 경우 setContentView(view)이라고 부를 수도 있습니다.

관련 문제