あまり多くのコードを表示せずに:
私はActivity
「A」を持っています。これにより、を介してActivity
データが入力され、'sはすべての行のアイテムにを設定します。ListView
BaseAdapter
BaseAdapter
getView()
onClickListener()
AlertDialog
行の項目がクリックされたときにActivity
「A」で表示したい。
あまり多くのコードを表示せずに:
私はActivity
「A」を持っています。これにより、を介してActivity
データが入力され、'sはすべての行のアイテムにを設定します。ListView
BaseAdapter
BaseAdapter
getView()
onClickListener()
AlertDialog
行の項目がクリックされたときにActivity
「A」で表示したい。
どこで問題が発生するのかわかりません。BaseAdapter
Aにバージョンがある場合は、Aで作成したプライベートメソッドを(のメソッドで設定したその行のアイテムに対してActivity
)呼び出すことができます。OnCLickListener
getView
BaseAdapter
Activity
private void showADialog(int position) {
new AlertDialog.Builder(this)
.setMessage("The clicked row is " + position)
.setPositiveButton("Ok?",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog,
int which) {
dialog.dismiss();
}
}).show();
}
カスタムがABaseAdapter
と同じファイルにない場合は、渡したものを使用できます(アダプターのコードが前の質問のコードである場合は、コンストラクターで渡す必要があります)。次に、それをアクティビティにキャストして、前のメソッドを呼び出すことができます。また、リスナーを設定するときは、タグとして渡す必要があります。そうしないと、ビューとリスナーがリサイクルされるため、間違った位置に配置される可能性があります。Activity
Context
BaseAdapter
Context
showADialog()
position
OnCLickListener
//...
item.setTag(new Integer(position)); // or if you use a ViewHolder: holder.item bla.....
item.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Integer realPosition = (Integer) v.getTag();
// Here show the dialog using one of the methods above.You either:
// showADialog(realPosition); // when the code for your custom BaseAdapter in in the same class as Activity A
//((CallingAlertDialogBaseAdapter) context).showADialog(realPosition); // when the code for the custom BaseAdapter is in a separate file then Activity A
//create directly an AlertDialog. For this you'll require a valid Context(from an Activity(getApplicationCOntext() will NOT work).
//You have this context from the parameter that you pass in the constructor of your custom BaseAdapter(as you ussualy pass this in the Activity where you instantiate the adapter)
}
});
//...