1

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;         
        }
    }
}
4

0 に答える 0