Обещанный код:
CategoryAdapter полностью:
public class CategoryAdapter extends ArrayAdapter {
private List _items;
public CategoryAdapter(Context context, int textViewResourceId,
List items) {
super(context, textViewResourceId, items);
_items = items;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;
if (v == null) {
LayoutInflater vi = (LayoutInflater) getContext().getSystemService(
Context.LAYOUT_INFLATER_SERVICE);
v = vi.inflate(R.layout.list_item_layout, null);
v.destroyDrawingCache();
}
Category cat = _items.get(position);
if (cat != null) {
TextView listText = (TextView) v.findViewById(R.id.list_text);
listText.setText(cat.getName());
}
return v;
}
@Override
public Category getItem(int position) {
return _items.get(position);
}
}
Отсюда(таб) мы начинаем переход:
public class RecipeTab extends ActivityGroup {
private ListView _lv;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
setContentView(R.layout.recipe_tab);
List cats = Category.getAllCategories(this);
_lv = (ListView)findViewById(android.R.id.list);
_lv.setAdapter(new CategoryAdapter(getBaseContext(),R.layout.list_item_layout, cats));
_lv.setOnItemClickListener(new ListClickListener());
}
public void replaceContentView(String id, Intent newIntent/*,int result*/) {
View view = getLocalActivityManager().startActivity(id,newIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP))
.getDecorView();
this.setContentView(view);
}
...
код обработчика при нажатии на элемент списка:
private class ListClickListener implements ListView.OnItemClickListener {
public void onItemClick(AdapterView parent, View v, int position, long l){
Category selectedItem = (Category)_lv.getItemAtPosition(position);
int catId = selectedItem.getId();
Intent intent = new Intent(RecipeTab.this,CategoryActivity.class);
Bundle bundle = new Bundle();
bundle.putInt("catId", catId);
intent.putExtras(bundle);
replaceContentView("categoryActivity", intent);
}
}
...
}
В данный активити мы переходим и потом обратно на RecipeTab
public class CategoryActivity extends Activity{
private ListView _lv;
private Button _btBack;
private LocalActivityManager lam;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
setContentView(R.layout.category_activity_layout);
_btBack = (Button)findViewById(R.id.back_to_cats_button);
_btBack.setOnClickListener(new BackButtonListener());
List recps = Recipe.getRecipesByCatId(this, catId);
_lv = (ListView)findViewById(android.R.id.list);
_lv.setAdapter(new RecipeAdapter(getBaseContext(),R.layout.recipe_list_item, recps));
}
и код обработчика:
class BackButtonListener implements View.OnClickListener {
public void onClick(View v){
Intent intent = new Intent(v.getContext(), RecipeTab.class);
RecipeTab parentActivity = (RecipeTab)getParent();
parentActivity.replaceContentView("recipeTab", intent);
}
}
Код лэйаутов для CategoryAcivity и элемента списка находится в вопросе выше.
По-моему, много букв получилось, так что остальное по требованию.
Кстать, кнопка назад в эмуляторе почему-то переходит не на предидущий активити, а на рабочий стол.
Почему так?