2012-04-29 16 views
1

データベースのリストにコンテキストメニューを使用するAndroidアプリを構築しています。私はそれがすべて正常に働いていた、マップを使用するアプリケーションのセクションを構築するに移動し、今(私はレベル10アンドロイドのGoogleエミュレータに切り替えている)私は2つの問題が湧き出た。最初は十分に速く修正されましたが、私のコンテキストメニューは表示されなくなりました。それは、エミュレータの変化とは何かだ場合、私は知らないが、ここに私のコードは次のとおりです。Androidのコンテキストメニューがエミュレータに表示されなくなった

のonCreateでは、我々が持っている:

super.onCreate(savedInstanceState); 

datasource = new DiaryDataSource(this); 
datasource.open(); 

List<DiaryEntry> values = datasource.getAllDiaryEntries(); 

DiaryScheduleAdapter adapter = new DiaryScheduleAdapter(this,values); 
setListAdapter(adapter); 

registerForContextMenu(getListView()); 

はその後ArrayAdapterを拡張する私のクラスでは、我々は持っている:

@Override 
    public View getView(int position, View convertView, ViewGroup parent) 
    { 
     DiaryEntry diaryEntry = getItem(position); 

     View v = convertView; 
     if (v == null) 
     { 
      v = li.inflate(R.layout.diary_schedule, null); 
     } 

**** TextViews etc **** 

     v.setOnClickListener(new OnItemClickListener(position)); 

     return v; 

そしてonCreateContextMenu:

@Override 
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) 
{ 
    super.onCreateContextMenu(menu, v, menuInfo); 
    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.diary_context_menu, menu); 
} 

また、通常のプレスクリックLISTEについて私はこれを使用します:

private class OnItemClickListener implements OnClickListener 
{   
    private int mPosition; 

    OnItemClickListener(int position) 
    { 
     mPosition = position; 
    } 

    @Override 
    public void onClick(View v) 
    { 
     **** various bits of code to set up intent **** 

     startActivity(descIntent); 
    }    
} 

それからその下のonContextItemSelectedメソッドが、私はそれを得ることはありません。繰り返しますが、私はコードに変更を加えませんでしたが、長いクリックは何もしません。何か案は?

おかげ

+0

onLongClick、getListViewなどと任意のためのあなたのコードを投稿してください。 logcatエラーも同様です。 – Sam

+0

私はonLongClickコードを持っておらず、エラーもありません。私はクリックリスナー - 'v.setOnClickListener(新しいOnItemClickListener(position));' - 各リスト項目をクリックすることもできます。しかし、もう一度、このコードだけで1週間前に動作するには十分でした... onLongClickコードをいくつか追加する必要がありますか? –

+0

具体的には、コードが矛盾していないことを確認したいと思います。最近あなたのプロジェクトをきれいにしましたか? OnCreateContextMenuに 'super.onCreateContextMenu(menu、v、menuInfo); 'を追加するとヘルプが表示されますか? – Sam

答えて

0

ソリューションは、私のGetViewメソッドには、以下のコード行を追加しました:

convertView.setLongClickable(true); 
便利な入力の多くのためのサムに再び

おかげ

1

書き換えここ

(私はIDE外でコードを書くために試みるべきではありませんいくつかの日)は私が言おうとしたかの簡単な例です:

public class ExampleActivity extends ListActivity { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     List<String> list = new ArrayList<String>(); 
     list.add("Shoes"); 
     list.add("Socks"); 
     list.add("Sandals"); 

     ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, list); 
     setListAdapter(adapter); 

     ListView listView = (ListView) findViewById(android.R.id.list); 
     registerForContextMenu(listView); 
    } 

    @Override 
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) { 
     Log.v("Main", "Create Menu"); 
    } 

    protected void onListItemClick (ListView l, View v, int position, long id) { 
     Log.v("Main", "Item Click"); 
    } 
} 

コンテキストメニューを各行に固有のものにしたい場合は、menuInfoを使用します。

+0

これはListViewアクティビティです私はこれが正しいと思う。つまり、基本的には、アイテムをクリックすると別のアクティビティに移動し、そのアイテムの詳細を(OnItemClickListenerを使用して)取得するリストです。また、長押しすると、リスト項目を編集/削除するためのコンテキストメニューが表示されます。現時点では、通常のクリックが機能します。すでに持っているものとは別のコード行を作りたいのですか、それとも両方をカバーするものを用意したいのですか?私は演奏を開始します!ああ、私は別の空白の 'onClick(View v)'メソッドを持っている場合に違いがあります。 –

+0

私はちょうど現在のonItemClickListenerコードを追加しました –

+0

すべてのことを言及する点を忘れていました:しかし、あなたは何とかあなたが長いクリックを吸収しない各行をクリックして項目を処理することを確認してください。 – Sam

関連する問題