2013-01-03 1 views
1

"ListActivity.java"에서 컨텍스트 메뉴를 이미 사용하고 있지만 상황에 맞는 메뉴가 열려 있지 않아 팝업됩니다. Context Menu에서 Show Record에 두 개의 옵션을 추가하고 Delete Record에는 다른 옵션을 추가합니다. ListView 레코드를 길게 누르면 상황 별 메뉴가 열리고 "표시"를 선택한 다음 특정 레코드가 다른 활동에 표시됩니다. 이 액티비티에서는 양식을 만듭니다. 이 양식 필드에서 레코드가 조정됩니다. 그래서 내가 어떻게 할 수 있을까 ???어떻게 목록보기에서 컨텍스트 메뉴를 삭제하고 안드로이드에 기록 표시?

**My ListActivity.java is here:** 

public class ListActivity extends Activity { 
    ListView lv; 
    ArrayList<String> items = new ArrayList<String>(); 
    ArrayList<String> items_id = new ArrayList<String>(); 
    dbhelper dh; 
    SQLiteDatabase db; 
    int index_id; 
    Button btn; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_list); 
     Button btn; 
     btn = (Button)findViewById(R.id.newProjectlist); 
     btn.setOnClickListener(new OnClickListener() { 

      public void onClick(View v) { 
       // TODO Auto-generated method stub 


        Intent intent= new Intent(ListActivity.this,NewProject.class); 
       startActivity(intent); 
      } 
     }); 
     lv = (ListView)findViewById(R.id.projectListView); 
     setUpList(); 
     dh = new dbhelper(this); 

     Cursor c = getAllData(); 
     showAllData(c); 
     registerForContextMenu(lv);  
    } 

    @Override 
    public void onCreateContextMenu(ContextMenu menu, View v, 
      ContextMenuInfo menuInfo) { 
     // TODO Auto-generated method stub 
     super.onCreateContextMenu(menu, v, menuInfo); 

     if(v.getId() == R.id.projectList){ 
      menu.setHeaderIcon(R.drawable.ic_launcher); 
      menu.setHeaderTitle("Record List"); 
      menu.add(0,1,menu.NONE,"Delete Record"); 
      menu.add(0,2,menu.NONE,"Show Record"); 
     } 
    } 

    @Override 
public boolean onContextItemSelected(MenuItem item) { 
    // TODO Auto-generated method stub 
     int itemId = item.getItemId(); 
     if(itemId == 1) 
     { 
      AdapterView.AdapterContextMenuInfo menuinfo = (AdapterContextMenuInfo) item.getMenuInfo(); 
      int poistion = menuinfo.position; 
      String id_string = items_id.get(poistion); 
      long id = Long.valueOf(id_string); 

      //menuinfo = (AdapterContextMenuInfo) item.getMenuInfo(); 
      //index_id = menuinfo.position; 
      deleteUserData(index_id); 
      items_id.remove(poistion); 
     } 
     if(itemId == 2){ 
      AdapterView.AdapterContextMenuInfo menuinfo; 
      menuinfo = (AdapterContextMenuInfo) item.getMenuInfo(); 
      index_id = menuinfo.position; 
      editUserData(index_id); 
     } 
    return super.onContextItemSelected(item); 
} 

    private void editUserData(int indexid) { 
     // TODO Auto-generated method stub 
     String user_id = items_id.get(indexid); 
     Intent intEdit = new Intent(ListActivity.this, MainActivity.class); 
     intEdit.putExtra("EditID", user_id); 
     startActivityForResult(intEdit, 1); 
    } 

    private void deleteUserData(int indexid) { 
     // TODO Auto-generated method stub 
//  String user_id = items_id.get(indexid); 
     //Toast.makeText(getApplicationContext(), "id " + user_id, 1).show(); 
     db = dh.getWritableDatabase(); 
     db.delete("timer","_ID" + "=" + indexid, null); 
     finish(); 
//  Toast.makeText(getApplicationContext(), "Record deleted successfully", 1).show(); 
    } 

    private void showAllData(Cursor c) { 
     // TODO Auto-generated method stub 
     while(c.moveToNext()) 
     { 
      int id = c.getInt(0); 
      String name = c.getString(1); 
      String timerpoint1 = c.getString(2); 
      String timerpoint2 = c.getString(3); 
      String timerpoint3 = c.getString(4); 
      String servicetime1 = c.getString(5); 
      String servicetime2 = c.getString(6); 
      items.add("" + name); 
      items_id.add(""+id); 
     } 
     setUpList(); 
    } 

    private Cursor getAllData() { 
     // TODO Auto-generated method stub 
     db = dh.getReadableDatabase(); 
     //String sortorder = dh.Name + "DESC"; 
    // String query ="SELECT DISTINCT name FROM timer"; 
    // Cursor c = db.rawQuery(query, null); 
    // if (c != null) { 
    //   c.moveToFirst(); 
    //  } 
//  String[] cols = new String[] {"name"}; 
     Cursor c = db.query(true, "timer",null,null,null,null,null,null,null); 
     //Cursor cur = db.query(Distinct,"timer", null, null, null, null, null, null, null); 
     startManagingCursor(c); 
    // Cursor c=db.rawQuery("select distinct Name from timer;",null); 
     return c; 
     }  
    private void setUpList() { 
     // TODO Auto-generated method stub 
     lv.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,items)); 
    } 

    } 
+0

Longclicking에서 컨텍스트 메뉴를 열려고합니까? 그리고 당신은 그것을 얻지 못하고 있습니까? – Kanth

+0

예. 그러나 나는 그것을 얻지 않는다. –

+0

하지만 이미 답을 수락하셨습니까? 그래서, 효과가 있습니까? – Kanth

답변

1

당신이있는 행을 삭제 할 수 있어야한다 :

if(itemId == 1) 
{ 
    AdapterView.AdapterContextMenuInfo menuinfo = (AdapterContextMenuInfo) item.getMenuInfo(); 
    deleteUserData(menuInfo.id); 
    items_id.remove(menuInfo.position); 
} 

그리고 당신은 당신의 ListView에 대한 데이터베이스 정보를 결합하는 CursorAdapter를 사용하는 경우가 remove()를 호출 할 필요는 없습니다, 그것은거야 내장 DataObserver를 통해 자동으로 수행됩니다.

+0

문자열 user_id = items_id.get (id); 이 문장에서 코드는 double을 int로 변환하려고합니다. 그래서 내가 무엇을 할 수 있니??? –

+0

'double'을'int'로 설정 했습니까? ... – Sam

+0

나는이 코드를 이미 넣었으나 "id"가 long 형으로 선언 되었기 때문에 코드가 int 형으로 캐스팅되어야하므로 deleteUserData (long id) 메소드를 사용할 때 문자열 user_id = items_id.get (id); 문은 "id"double을 int로 변환해야합니다. –

관련 문제