2011-04-30 3 views
0

메뉴 처리기와 관련하여 도와주세요. 나는 다른 활동에서 호출 할 수있는 메뉴 핸들러를 만들고 싶다. 모든 것이 잘 작동합니다. 목록이 서버에서 가져 오는 중이고 메뉴도 나타나지만 "강제 종료"버튼을 클릭하면 나타납니다. 여기 활동을위한 메뉴 핸들러

내가 같은 메뉴가 작동하려면 여기를 통해 meun 핸들러 클래스

package com.droidnova.android.howto.optionmenu; 

import android.app.Activity; 
import android.content.Intent; 
import android.view.Menu; 
import android.view.MenuInflater; 
import android.view.MenuItem; 
import android.content.Intent; 

public class MenuHandler extends Activity{ 
    private Activity activity; 

    public MenuHandler(Activity activity) { 
     this.activity = activity; 
    } 

    public boolean onCreateOptionsMenu(Menu menu) { 
     MenuInflater inflater = activity.getMenuInflater(); 
     inflater.inflate(R.menu.menu, menu); 
     return true; 
    } 

    public boolean onOptionsItemSelected(MenuItem item) { 
     switch (item.getItemId()) { 
      case R.id.settings:  
       Intent intent = new Intent(this, ShowSettings.class); 
        startActivity(intent); 
      break; 
      case R.id.services:  
       Intent intent2 = new Intent(this, Test.class); 
       startActivity(intent2); 
       break; 
      case R.id.Quit: 

       finish(); 



       break; 
      default:  
      break; 
     } 
     return true; 
    } 
} 

입니다.

package com.droidnova.android.howto.optionmenu; 여기

import java.util.ArrayList; 
import java.util.HashMap; 

import org.json.JSONArray; 
import org.json.JSONException; 
import org.json.JSONObject; 
import org.w3c.dom.Document; 
import org.w3c.dom.Element; 
import org.w3c.dom.NodeList; 

import android.app.ListActivity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.AdapterView.OnItemClickListener; 
import android.widget.ListAdapter; 
import android.widget.ListView; 
import android.widget.SimpleAdapter; 
import android.widget.Toast; 

public class Test extends ListActivity { 
    private MenuHandler menuHandler; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.listplaceholder); 
     menuHandler = new MenuHandler(this); 
     ArrayList<HashMap<String, String>> mylist = new ArrayList<HashMap<String, String>>(); 

     JSONObject json = JSONfunctions.getJSONfromURL("http://midsweden.gofreeserve.com/fetch.php"); 

     try{ 

      JSONArray earthquakes = json.getJSONArray("earthquakes"); 

      for(int i=0;i<earthquakes.length();i++){       
       HashMap<String, String> map = new HashMap<String, String>();  
       JSONObject e = earthquakes.getJSONObject(i); 

       map.put("id", String.valueOf(i)); 
       map.put("name", "Earthquake name:" + e.getString("name")); 
       map.put("password", "Magnitude: " + e.getString("password")); 
       mylist.add(map);    
      }  
     }catch(JSONException e)  { 
      Log.e("log_tag", "Error parsing data "+e.toString()); 
     } 

     ListAdapter adapter = new SimpleAdapter(this, mylist , R.layout.test, 
         new String[] { "name", "magnitude" }, 
         new int[] { R.id.item_title, R.id.item_subtitle }); 

     setListAdapter(adapter); 

     final ListView lv = getListView(); 
     lv.setTextFilterEnabled(true); 
     lv.setOnItemClickListener(new OnItemClickListener() { 
      public void onItemClick(AdapterView<?> parent, View view, int position, long id) {    
       @SuppressWarnings("unchecked") 
       HashMap<String, String> o = (HashMap<String, String>) lv.getItemAtPosition(position);     
       Toast.makeText(Test.this, "ID '" + o.get("id") + "' was clicked.", Toast.LENGTH_SHORT).show(); 

      } 
     }); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     return menuHandler.onCreateOptionsMenu(menu); 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     return menuHandler.onOptionsItemSelected(item); 
    } 
} 

내가 코드를 던지고 예외에 대한 특정 로그 캣 피드백없이 로그 캣 enter image description here

+0

logcat에서 어떤 오류가 발생합니까? – MByD

+0

죄송합니다. logcat이 무슨 뜻입니까? – umar

+0

이것은 Android 디바이스/에뮬레이터의 로그를 보여주는 Eclipse의 디버그보기에있는 창입니다. 또한 앱이 충돌 할 때 예외 세부 정보를 표시합니다 (빨간색 선 모양) – MByD

답변

1

에 얻고 무엇을, 내 추측은 안드로이드에서 여러에게 Context 인스턴스를 건너 당신을 좋아하지 않는 것입니다 당신이 다른 하나의 내부에 Activity을 인스턴스화함으로써 당신이하는 방식.

목표를 달성하는 훨씬 더 좋은 방법은 Activity에 대한 기본 클래스로 MenuHandler을 사용하여 메뉴를 표시하는 것입니다. 즉 :

  • 해당 생성자를 제거하는 경우를 제외하고는 MenuHandler 만 남겨 둡니다.
  • Activity 클래스를 모두 MenuHandler으로 확장하면 해당 기능을 가져올 수 있습니다.