0

私のonitemlongclickリスナーが動作しないのはなぜですか? MainActivityから

public class MainActivity extends ListActivity implements AdapterView.OnItemLongClickListener { 
    private DataSourceSql mDataSourceSql; 
    protected ArrayList<String> mProfileNames; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     mDataSourceSql = new DataSourceSql(MainActivity.this); 
     mNames = new ArrayList<String>(); 

     //this part here 
     ListView lv = (ListView) findViewById(android.R.id.list); 
     lv.setLongClickable(true); 
    } 

この場合ListViewのIDは、android:id="@android:id/list"としてXMLに設定されています。

そして後で同じ活動で:

@Override 
protected void onListItemClick(ListView l, View v, int position, long id) { 
    super.onListItemClick(l, v, position, id); 
    Toast.makeText(this, mNames.get(position), Toast.LENGTH_SHORT).show(); 
} 

@Override 
public boolean onItemLongClick(AdapterView<?> l, View v, final int position, long id) { 
    Toast.makeText(this, "long clicked: " + mNames.get(position), Toast.LENGTH_LONG).show(); 
    return true; 
} 

しかし、私長押し、リスト内のアイテム、onListItemClickあるトリガー唯一のもの。私は長いクリックでメッセージを得ることはありません。

+0

私は – user6101402

+0

あなたが '' lv.setOnLongClickListener(これ)を呼び出す必要があります(私は、リスト内の項目を保持し、より多くのオプションを取得することができるようにしたい)長いクリック=長押しを前提としています。 –

+0

@MikeM。私の答えは間違っている/悪い練習ですか? – user6101402

答えて

0

私はそれを理解したと思うが、誰かが何かを見逃しているなら、誰かが私を修正してください。

私は「実装...」ものを削除し、その後のonCreateメソッドに次の追加:私はそこにtrueまたはfalseを返すべきであるかどうかわからないのですが、

lv.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener 
       () { 
      @Override 
      public boolean onItemLongClick(AdapterView<?> av, View v, int 
        pos, long id) { 
       onListItemLongClick(v, pos, id); 
       return false; 
      } 
     }); 

を。

は私も

するには、以下の長いクリック機能をダウンに変更
public boolean onListItemLongClick(View v, final int position, long id) { 
    Toast.makeText(this, "long clicked: " + mNames.get(position), Toast.LENGTH_LONG).show(); 
    return true; 
} 

編集:

より迅速なアプローチはちょうどOPの私のonCreateメソッドにlv.setOnItemLongClickListener(this);を追加することです。

あなたは自分の古い方法を使用し...直接あなたのonCreate()内AdapterView.OnItemLongClickListenerのようなインターフェイスを実装するべきではありません
+0

あなたの 'Activity'が' OnItemLongClickListener'インターフェースを実装している場合、単に 'lv.setOnItemLongClickListener(this);'を呼び出します。 –

1

は(あなたのクラスは、このインタフェースを実装する)と、各メソッドのオーバーライドで、あなたは次のように書くことがあります。

lv.setOnItemLongClickListener(this); 
lv.setonListItemLongClickListener(this); 
0

これを使用してください。あなたの問題は解決します。

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
       Toast.makeText(MainActivity.this, "Click", Toast.LENGTH_SHORT).show(); 
      } 
     }); 
     listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { 
      @Override 
      public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) { 

       Toast.makeText(MainActivity.this, "Long Click", Toast.LENGTH_SHORT).show(); 
       return true; 
      } 
     }); 
関連する問題