ListView をメニューとして使用しています。項目を選択すると、スタイルが変更されて選択されていることが示され、コンテンツ ペインが変更されます。私の問題は、最初のアイテムの「スタイルを選択/変更」して、デフォルトで選択されたアイテムであることを示す方法がわからないことです。この画面は、ユーザーがクリックする前に最初に表示される画面であるため、アイテムのクリックは実行していません。onActivityCreated と onStart で getListView().getChildAt(0) を試しましたが、常に null が返されます。また、listView.performItemClick() を呼び出してみました。以下はコードで、カスタム MenuAdapter で現在のハック ソリューションを確認できます。多くのアプリがこれを行いたいと思われるため、単純なものが欠けているように感じます。助けてくれてありがとう!
public class FixItActionListFragment extends ListFragment {
// The last menu item selected
View lastRow = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Defined the list of actions in the file strings.xml
String[] fixItActions = getResources().getStringArray(R.array.fixItActions);
setListAdapter(new MenuAdapter(getActivity(), fixItActions));
}
/**
* Inflate the layout for the action list fragment
*/
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
// Inflate the layout for the action list fragment
View v = inflater.inflate(R.layout.fixitactionlistfragment, container, false);
return v;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
// this isn't working
//ListView listview = getListView();
//View view = listview.getAdapter().getView(0, null, null);
//long rowId = listview.getAdapter().getItemId(0);
//listview.performItemClick(view, 0, rowId);
}
/**
* Called when a action item is selected
*/
public void onListItemClick(ListView parent, View view, int position, long id) {
// Change the style of the selected item and revert the last item
if (lastRow != null) {
// Set the previous selected row to unselected
...
}
// Set current item to selected
...
lastRow = view;
}
class MenuAdapter extends ArrayAdapter<String> {
MenuAdapter(Context context, String[] actions) {
super(context, R.layout.menu_row, R.id.menuItem, actions);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// Get the selected row
View row = super.getView(position, convertView, parent);
// HACK!!!! If it's the first item, then mark as selected
if (lastRow == null) {
lastRow = row;
TextView thisItem = (TextView) row.findViewById(R.id.menuItem);
thisItem.setTextColor(getResources().getColor(R.color.menuItemSelected));
}
return row;
}
}
}