2015-09-17 3 views
0

Я пытаюсь, чтобы моя программа автоматически прокручивалась до целочисленной позиции, заданной глобальным целым числом AtlasApplication.sSlectedPositionForLaw. Я пробовал использовать mNotificationLv.smoothScrollToPostion (AtlasApplication.sSlectedPositionForLaw) без везения в SubMenuActivity. Как заставить SubMenuActivity автоматически прокручивать выбранную позицию в адаптере?Автоматическая прокрутка до позиции в адаптере

SubMenuActivity

@Override 
protected void onResume() { 
    try { 
     super.onResume(); 
     FontLoader.loadFonts(this); 
     headerLayout.LoadHeaderFont(); 
     footerLayout.LoadFooterFont(); 
     FontLoader.setRalewayBoldFont(mSubMenuHeaderTv); 
     FontLoader.setAwesomeFont(mSubMenuBackTv); 
     FontLoader.setAtlasFont(mSubMenuIconTv); 
     loadSubMenuLabel(); 
     subMenuAdapter.setList(AtlasApplication.lstLawsForLocation); 
     mNotificationLv.setAdapter(subMenuAdapter); 
     mNotificationLv.smoothScrollToPosition(21); 

     activityResumed(); 
    } 
    catch(Exception e){ 
     exceptionHandler.handle(e, "onResume()"); 
    } 
} 

SubMenuAdapter

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    ViewHolder holder = null; 
    LayoutInflater mInflater = (LayoutInflater) context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE); 
    if (convertView == null) { 
     convertView = mInflater.inflate(R.layout.row_sub_menu_item, null); 
     holder = new ViewHolder(); 
     holder.rowSubMenuLl = (LinearLayout) convertView.findViewById(R.id.row_sub_menu_ll); 
     holder.mSubMenuTitleTv = (TextView) convertView.findViewById(R.id.sub_menu_title_tv); 
     holder.mSubMenuDetailPane = (LinearLayout) convertView.findViewById(R.id.sub_menu_detail_pane_ll); 
     convertView.setTag(holder); 
    } else { 
     holder = (ViewHolder) convertView.getTag(); 
    } 

    FontLoader.setRalewayRegularFont(holder.mSubMenuTitleTv); 

    LawModel notificationModel = lstSubMenuModels.get(position); 

    if(Integer.parseInt(notificationModel.getTagID()) == AtlasApplication.sSelectedPositionForLaw) { 
     notificationModel.setSelected(true); 
    } 

    holder.mSubMenuTitleTv.setText(notificationModel.getTagName().trim()); 

    if (notificationModel.isSelected) { 
     //AtlasApplication.SubMenuTitle = notificationModel.getTagName(); 
     AtlasApplication.sLawModelSelected = notificationModel; 
     AtlasApplication.sSelectedPositionForLaw=position; 
     if (holder.mSubMenuDetailPane.getChildCount() < 1) { 
      SpeedingFines sf = new SpeedingFines(context, holder.mSubMenuDetailPane); 
      sf.setPriorityListener(mOnPriorityUpdateListener); 

      holder.rowSubMenuLl.setBackgroundResource(R.color.taxes_bg); 
      holder.mSubMenuDetailPane.requestFocus(); 
     } 
    } else { 
     holder.mSubMenuDetailPane.removeAllViews(); 
     holder.rowSubMenuLl.setBackgroundResource(R.color.grad_dark); 
    } 

    holder.mSubMenuTitleTv.setId(position); 
    holder.mSubMenuTitleTv.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      setAllselectedFalse(v.getId()); 
      lstSubMenuModels.get(v.getId()).isSelected = !lstSubMenuModels.get(v.getId()).isSelected; 
      notifyDataSetChanged(); 
     } 
    }); 
    return convertView; 
} 

private void setAllselectedFalse(int selectedRow) { 
    AtlasApplication.sSelectedPositionForLaw=-1; 
    for (int i = 0; i < lstSubMenuModels.size(); i++) { 
     if (i != selectedRow) { 
      lstSubMenuModels.get(i).setSelected(false); 
     } 
    } 
} 

public void setList(List<LawModel> subMenuModels) { 
    this.lstSubMenuModels = subMenuModels; 
    notifyDataSetChanged(); 
} 

private class ViewHolder { 
    TextView mSubMenuTitleTv; 
    LinearLayout rowSubMenuLl, mSubMenuDetailPane; 
} 

ответ

1

время назад я делал что-то подобное, я мог бы перейти к пользовательской позиции таким образом:

listView.post(new Runnable() { 
     @Override 
     public void run() { 
      listView.smoothScrollToPosition(position); 
     } 
    }); 

Таким образом, в вашем случае это может быть:

@Override 
protected void onResume() { 
try { 
    super.onResume(); 
    FontLoader.loadFonts(this); 
    headerLayout.LoadHeaderFont(); 
    footerLayout.LoadFooterFont(); 
    FontLoader.setRalewayBoldFont(mSubMenuHeaderTv); 
    FontLoader.setAwesomeFont(mSubMenuBackTv); 
    FontLoader.setAtlasFont(mSubMenuIconTv); 
    loadSubMenuLabel(); 
    subMenuAdapter.setList(AtlasApplication.lstLawsForLocation); 
    mNotificationLv.setAdapter(subMenuAdapter); 
    mNotificationLv.post(new Runnable() { 
     @Override 
     public void run() { 
      mNotificationLv.smoothScrollToPosition(21); 
     } 
    }); 

    activityResumed(); 
} 
catch(Exception e){ 
    exceptionHandler.handle(e, "onResume()"); 
} 

}

причина я думаю, что это:

пользовательский интерфейс (пользовательский интерфейс) от андроида работы, основанной на очереди вещей в сделать, и сделать в работоспособный после функции вы говорите UI, , когда он может, после того, как он сделал все, что в очереди выполните некоторые действия , в этом случае прокрутите до определенной позиции listView.

+0

Работал как шарм спасибо бутон :) –

+0

добро пожаловать –

-1

Я здесь, чтобы решить вашу проблему:

рассчитать количество просмотров, чтобы попасть в нужное положение и почти вы можете получить Ваше местонахождение:

int sum = 0; 
for (int i = 0; i < mListView.getChildCount(); i++) { 
    if(sum > position){ 
     mListView.smoothScrollToPosition(i); 
     break; 
    } 
    sum = sum + mListView.getChildAt(i).getHeight(); 
} 

УДАЧИ ...

+0

У меня есть правильное положение. Мне нужно выяснить, как заставить экран автоматически прокручивать .... –

Смежные вопросы