をAlertDialog
含む がありListView
ます。はListView
、customCursor アダプターを介して取り込まれます。内で特定の行を選択済み (Holo テーマで青色で強調表示) に設定できないことを除いて、すべて正常に動作しListView
ます。
public AlertDialog m_accountsDialog;
private AlertDialog createAccountSwitcherDialog2()
{
Cursor listCursor = getDb().getAllListEntries();
if(listCursor.moveToFirst())
{
//Prepare the dialog box
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle(R.string.strAccounts);
ListView listView = new ListView(this);
listView.setLayoutParams(new ViewGroup.LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT));
listView.setAdapter(new AccountsAdapter(this,this,m_ActiveId, listCursor));
listView.setOnItemClickListener(new OnItemClickListener()
{
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, final long rowId)
{
m_accountsDialog.dismiss();
if(m_ActiveId != (int) rowId)
{
//Do some stuff on click
}
}
});
builder.setView(listView);
builder.setPositiveButton(...);
builder.setNegativeButton(...);
m_accountsDialog = builder.create();
m_accountsDialog.setOnShowListener(...);
m_accountsDialog.show();
}
return m_accountsDialog;
}
これは、アラート ダイアログ内にある listView を設定するために使用されるアダプタです。
public class AccountsAdapter extends CursorAdapter
{
private Context m_context; /**<Context to which we're bound*/
private Activity m_activity;
private boolean m_isTabletDevice;
private int m_ActiveId; // not used now. Can this be used to highlight the row?
public AccountsAdapter(Context context,Activity activity,int activeId, Cursor cursor)
{
super(context, cursor);
m_context = context;
m_activity = activity;
m_isTabletDevice = isTabletDevice(context);
m_ActiveId = activeId;
}
@Override
public void bindView(View rowView,final Context context, Cursor cursor)
{
if(rowView == null)
{
rowView = newView(context,cursor,null);
}
TextView tv = (TextView) rowView.findViewById(R.id.accountName);
tv.setText(cursor.getString(cursor.getColumnIndex(ProfileDatabase.COLUMN_PROFILENAME)));
ImageButton editAccountImageButton = (ImageButton) rowView.findViewById(R.id.accountEdit);
editAccountImageButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0)
{
Integer activeId = (Integer)arg0.getTag();
if(m_activity instanceof MainActivity)
{
((MyActivity)m_activity).m_accountsDialog.dismiss();
((MyActivity)m_activity).startEditAccountsActivity(activeId);
}
}
});
int accountId = cursor.getInt(cursor.getColumnIndex(ProfileDatabase.COLUMN_ACCOUNT_ID));
editAccountImageButton.setTag(profileId);
editAccountImageButton.setFocusable(false);
}
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent)
{
//create and return a rowView
}
}
リスト ビューのカスタム行。
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:minHeight="?android:attr/listPreferredItemHeight" >
<ImageButton
android:id="@+id/accountEdit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:background="@drawable/option_selector"
android:src="@drawable/edit_account_button" />
<TextView
android:id="@+id/accountName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_toLeftOf="@id/accountEdit"
android:bufferType="spannable"
android:ellipsize="end"
android:layout_alignParentLeft="true" />
私は試した、
listView.setItemChecked(position, true);
listView.setSelection(position);
アラートダイアログを作成する関数では機能しませんでした。私が持っている他のオプションは、アダプターの行ビューに背景色を手動で設定することですが、テーマはデバイスごとに変わる可能性があるため、もちろんお勧めできません。
事前に感謝し、長い投稿を申し訳ありません.