0

フラグメント内にリストビューがあります。このリストビューのリスナーはlongClickです。フラグメント内のリストビューで選択された行を覚えている

private AdapterView.OnItemLongClickListener receivedListItemLongClickListener = new AdapterView.OnItemLongClickListener() { 

    @Override 
    public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long arg3) { 
     Object object = reeceivedListView.getItemAtPosition(position); 
     showDialog(OPTIONS_DIALOG_FRAGMENT); 
     return true; 
    } 

}; 

それは親フラグメントで選択した行を元に戻すには、削除するオプションを持つ新しいリストAlertDialogを起動します。 AlertViewの選択肢を親に戻すことができましたが、どの行が選択されたかはわかりません。このデータを覚えている正しい方法は何でしょうか?

+1

行はpositioあなたは長い間、このコード部分を書いていますか? –

+0

をクリックしましたか?あなたのアダプターにはありますか? –

答えて

0

以下のようにあなたのnアダプタ用のそのデータを格納する変数を作る:あなたのアダプタで :

int lastSelectedRowByLongClick = -1; 

、あなたの長いクリックで:

private AdapterView.OnItemLongClickListener receivedListItemLongClickListener = new AdapterView.OnItemLongClickListener() { 

@Override 
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long arg3) { 
    lastSelectedRowByLongClick = position; 
    Object object = reeceivedListView.getItemAtPosition(position); 
    showDialog(OPTIONS_DIALOG_FRAGMENT); 
    return true; 
} 

}; 

とベストプラクティスがすることです削除を入れて、あなたのアダプタにも次のような機能を入れてください:

public void deleteLastLongedPressed() 
{ 
if(lastSelectedRowByLongClick != -1) 
{ 
    //TODO: write the logic to delete the row 
    /// 
    //then set the variable to -1 again so nothing happens if no one was selected 
    lastSelectedRowByLongClick= -1; 
} 
} 
+0

お寄せいただきありがとうございますが、フラグメントが破棄された場合や、フラグメントの新しいインスタンスが作成された場合は、これが機能しない可能性があります。私は選択された最後の行を追跡するためにインスタンス変数を保持していますが、それは優雅な解決策ではありません。もし私がこれをやりたければ。私は "このデータを覚えている正しい方法は何でしょうか"と尋ねるつもりはありません。私はAndroidが正しい方法でそれを行うための具体的な方法を提案しているかどうかを知りたい。 – user1324887

+0

アンドロイドは、一部のビューのクリックなどの履歴を通知する手段を提供していません。あなたがそれを必要とする場合は、あなたの世話をする必要があります。フラグメントが破棄された場合に変数を消去したくない場合は、静的にしてください。あなたができる最高の私を信じてください –

+0

私はそれが動作することに同意します。しかし、私はそれを行う正しい方法を理解しようとしています。インテントを持つ余分な変数として渡すのはどうですか? 'intent.putExtra(EXTRAS_KEY、extras);'これのようなもの? – user1324887

関連する問題