Java Android-如何从列表中获取视图位置

Java Android-如何从列表中获取视图位置,java,android,Java,Android,因此,我想锚定一个弹出窗口的一个滑动菜单中的特定选项。滑动菜单中有大量的项目,但我想得到一个特定项目的位置,这样我就可以使用视图来锚定窗口 我的问题是,我怎样才能得到那种特殊的观点。我有一个滑动菜单适配器和一个滑动菜单碎片 我希望这是比较清楚的 适配器: public class SlidingMenuAdapter extends BaseExpandableListAdapter implements OnGroupClickListener, OnChildClickListener, S

因此,我想锚定一个弹出窗口的一个滑动菜单中的特定选项。滑动菜单中有大量的项目,但我想得到一个特定项目的位置,这样我就可以使用视图来锚定窗口

我的问题是,我怎样才能得到那种特殊的观点。我有一个滑动菜单适配器和一个滑动菜单碎片

我希望这是比较清楚的

适配器:

public class SlidingMenuAdapter extends BaseExpandableListAdapter implements OnGroupClickListener, OnChildClickListener, SignInStatusChangedListener, OnTouchListener, OnGroupExpandListener, OnGroupCollapseListener
{
    private final LayoutInflater mInflater;
    private final String[] mMenuItemsSignedIn;
    private final String[] mMenuItemsAnon;
    private final String[] mMoreMenuItems;
    private final String[] mMyAccountMenuItems;
    private final BaseActivity mContext;
    private final int srollingDelay = 40;
    private ExpandableListView listView;
    private int mReservationCount = -1;
    private int mShortlistCount = -1;
    private static int expandedGroupPosition = -1;

    private SlidingMenuItemSelectedListener mListener;

    public SlidingMenuAdapter(final Context context, final String[] menuItemsSignedIn, final String[] menuItemsAnon, 
            final String[] moreMenuItems, final String[] myAccountMenuItems,ExpandableListView listView)
    {
        mContext = (BaseActivity) context;
        mInflater = LayoutInflater.from(context);
        mMenuItemsSignedIn = menuItemsSignedIn;
        mMenuItemsAnon = menuItemsAnon;
        mMoreMenuItems = moreMenuItems;
        mMyAccountMenuItems = myAccountMenuItems;
        this.listView = listView;
        SignInStatusHelper.getInstance().addSignInStatusChangedListener(this);

    }
 private void bindView(final int position, final ViewHolder viewHolder, final boolean expanded)
    {
        String title = getGroup(position);
        viewHolder.titleText.setText(title);
        if(isGroupWelcome(position)) {
            viewHolder.titleText.setText(String.format(title, User.init().getFirstName()));
        }

        int imageRes = getImageRes(position);
        if(imageRes!=0) {
            viewHolder.homeIcon.setVisibility(View.VISIBLE);
            viewHolder.homeIcon.setImageResource(imageRes);
        }
        else if (isGroupWelcome(position)){
            viewHolder.homeIcon.setVisibility(View.GONE);
        } else {
            viewHolder.homeIcon.setImageResource(R.drawable.sliding_menu_home_icon);
            viewHolder.homeIcon.setVisibility(View.INVISIBLE);
        }

        if (title.equals(mContext.getString(R.string.sliding_menu_current_store)))
        {
            if (Application.getInstance().getCurrentStore() != null) {
                viewHolder.subTitleText.setText(Application.getInstance().getCurrentStore().getName());
                viewHolder.subTitleText.setVisibility(View.VISIBLE);
            }
            else {
                viewHolder.subTitleText.setText(mContext.getString(R.string.sliding_menu_no_store_selected));
                viewHolder.subTitleText.setVisibility(View.VISIBLE);
            }
        } else {
            viewHolder.subTitleText.setText("");
            viewHolder.subTitleText.setVisibility(View.GONE);
        }

        // if 'More' row, show down arrow
        if (isGroupMore(position) || isGroupAccount(position))
        {

            viewHolder.moreArrow.setVisibility(View.VISIBLE);
            if (expanded) {
                viewHolder.moreArrow.setImageResource(R.drawable.sliding_menu_less_arrow_black);
            } else {
                viewHolder.moreArrow.setImageResource(R.drawable.sliding_menu_more_arrow_black);
            }
        }
        else
        {
            // otherwise make sure its hidden
            viewHolder.moreArrow.setVisibility(View.GONE);
        }

        // if 'Reservations' set count text
        if (title.equals(mContext.getString(R.string.sliding_menu_reservations)) && mReservationCount > 0)
        {
            viewHolder.countText.setText(Integer.toString(mReservationCount));
            viewHolder.countText.setVisibility(View.VISIBLE);
        }
        // if 'Shortlist' set count text
        else if (title.equals(mContext.getString(R.string.sliding_menu_shortlist)) && mShortlistCount > 0)
        {
            viewHolder.countText.setText(Integer.toString(mShortlistCount));
            viewHolder.countText.setVisibility(View.VISIBLE);
        }
        else
        {
            viewHolder.countText.setVisibility(View.GONE);
        }

    }
}
片段:

public class SlidingMenuFragment extends BaseFragment implements SlidingMenuItemSelectedListener
{
    private SlidingMenuAdapter mSlidingMenuAdapter;

    private Integer mShortlistCount;

    @Override
    public View onCreateView(final LayoutInflater inflater, final ViewGroup container,
            final Bundle savedInstanceState) {
        return inflater.inflate(R.layout.fragment_sliding_menu, null);
    }

    @Override
    public void onViewCreated(final View view, final Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);

        final Boolean showMediaLibrary = ConfigManager.getConfigManager().isMediaLibraryEnabled();
        final String[] menuItemsSignedIn = showMediaLibrary ?
                getResources().getStringArray(R.array.sliding_menu_items_signed_in) :
                getResources().getStringArray(R.array.sliding_menu_items_signed_in_no_library);
        final String[] menuItemsAnon = showMediaLibrary ?
                getResources().getStringArray(R.array.sliding_menu_items_anon) :
                getResources().getStringArray(R.array.sliding_menu_items_anon_no_library);
        final String[] moreMenuItems = getResources().getStringArray(
                R.array.sliding_menu_more_items);
        final String[] myAccountMenuItems = getResources().getStringArray(
                R.array.sliding_menu_my_account_items);
        final ExpandableListView listView = (ExpandableListView) view
                .findViewById(R.id.sliding_menu_list);
        mSlidingMenuAdapter = new SlidingMenuAdapter(getActivity(), menuItemsSignedIn,
                menuItemsAnon, moreMenuItems, myAccountMenuItems , listView);
        mSlidingMenuAdapter.setSlidingMenuItemSelectedListener(this);

        listView.setAdapter(mSlidingMenuAdapter);
        listView.setGroupIndicator(null);
        listView.setOnGroupClickListener(mSlidingMenuAdapter);
        listView.setOnChildClickListener(mSlidingMenuAdapter);
        listView.setOnGroupExpandListener(mSlidingMenuAdapter);
        listView.setOnGroupCollapseListener(mSlidingMenuAdapter);

        getLoaderManager().initLoader(0, null, mReservationLoaderCallback);
        getLoaderManager().initLoader(1, null, mShortlistLoaderCallback);

    }
 // handle menu item selected
    @Override
    public boolean slidingMenuItemSelected(final String label)
    {
        Intent intent = null;

        // any menu item which shouldn't cause expansion of a group or open a
        // new activity should return true, otherwise false
        boolean retVal = false;
        boolean closeMenu = true;

        if (label.equals(getResources().getString(R.string.sliding_menu_home))) {
            intent = new Intent(getActivity(), HomeActivity.class);
            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        } else if (label.equals(getResources().getString(R.string.sliding_menu_heading))) {
            // Do nothing when header/ icon tapped
            retVal = true;
            closeMenu = false;
        }   else if (label.equals(getResources().getString(R.string.sliding_menu_library))) {
            intent = new Intent(getActivity(), LibraryActivity.class);

        } else if (label.equals(getResources().getString(R.string.sliding_menu_shortlist))) {
            if (mShortlistCount != null && mShortlistCount == 0) {

                //ShorlistEmptyDialogFragment.showDialog(getActivity());

                SimplePopupWindow popup = new SimplePopupWindow(getActivity());
                popup.setLayout(R.layout.shortlist_popup); 
                popup.showAsDropDown(getView().findViewById(R.id.sliding_menu_list));
                closeMenu = false;
                retVal = true;
            }
}
我试着保持只添加所需的代码。所以在我召唤的片段中

SimplePopupWindow popup = new SimplePopupWindow(getActivity());
                popup.setLayout(R.layout.shortlist_popup); 
                popup.showAsDropDown(getView().findViewById(R.id.sliding_menu_list));
这只会在列表的底部创建一个弹出窗口,无论列表位于何处

listView.setOnItemClickListener(新的OnItemClickListener(){
listView.setOnItemClickListener(new OnItemClickListener(){
@Override
        public void onItemClick(AdapterView<?> arg0, View v, int pos, long id) {

               // write you logic here                                                  
        }       
}); 
@凌驾 公共链接(AdapterView arg0,视图v,内部位置,长id){ //把你的逻辑写在这里 } });
首先使用HashMap而不是字符串[] 看到这个了吗

listView.setOnItemClickListener(新的OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView arg0,视图v,内部位置,长id){
hashmap.get(位置).get(键)
}  

您可以使用listview.setOnItemClickListener()方法获取单击发生在哪个位置……这会添加到片段或适配器中吗?但是onitemClickListener会在slidingMenuAdapter或SlidingMenuFragment中实现吗?
listView.setOnItemClickListener(new OnItemClickListener(){
@Override
        public void onItemClick(AdapterView<?> arg0, View v, int position, long id) {

               hashmap.get(position).get(KEY)                                                
        }