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)
}