Переключение между вкладками с помощью группы действий, которые требуется отобразить последнее действие - вкладка ActivityGroup - PullRequest
3 голосов
/ 04 августа 2011

Я написал вкладку для моего приложения для Android.

Мой вопрос заключается в переключении между вкладками с использованием группы действий, для которой нужно отобразить последнее действие Я хочу показать последний открытый / посещенный экран, когда мы перемещаемся по вкладке. Мой переход на первый экран:

Мне нужно показать последний открытый экран при навигации по вкладке

Вкладка 1 -> Продажи. Это содержит 10 экран внутри (активность) Вкладка 2 -> Admin. Содержит 5 экранов внутри (активность) Вкладка 3 -> Настройка. Содержит 8 экранов внутри. (Actiivity)

Я нажал на вкладку 1, она загружает экран вкладки 1, который содержит список маршрутов продаж. Затем я щелкнул один маршрут продаж, он переходит к списку розничных продавцов на первой вкладке. Затем я щелкнул вкладку 3 «Настройка» закончите работу и вернитесь к продажам, на этот раз на вкладке «продажи» должен отображаться последний открытый экран.

Когда я нажимал на вкладку, на ней должно отображаться последнее открытое действие Как это сделать?

Мне понравилось. Пожалуйста, укажите, где я хочу изменить код для моих требований.

MainActivity. После входа в систему он будет звонить

  public class MainActivity extends TabActivity {
int selectedTab;
TabHost tabHost ;

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.tabview);

    TabHost t = getTabHost();
    tabHost = (TabHost)findViewById(android.R.id.tabhost);

    TabSpec firstTabSpec = tabHost.newTabSpec("tid1");
    TabSpec secondTabSpec = tabHost.newTabSpec("tid1");
    TabSpec thirdTabSpec = tabHost.newTabSpec("tid1");
    /** TabSpec setIndicator() is used to set name for the tab. */
    /** TabSpec setContent() is used to set content for a particular tab. */
    firstTabSpec.setIndicator("Sales").setContent(new Intent(this,SalesActivityGroup.class));
    secondTabSpec.setIndicator("Admin").setContent(new Intent(this,SettingActivityGroup.class));
    thirdTabSpec.setIndicator("Setting").setContent(new Intent(this,SettingActivityGroup.class));


    tabHost.addTab(firstTabSpec);
    tabHost.addTab(secondTabSpec);
    tabHost.addTab(thirdTabSpec);
    tabHost.setCurrentTab(0);
    tabHost.setMinimumHeight(25);
}

public void onTabChanged(String arg0) {
        selectedTab = tabHost.getCurrentTab();

}

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {
        moveTaskToBack(false);
        return true;
    }
    return super.onKeyDown(keyCode, event);
}
* *} Тысяча двадцать-один

First Tab1 (Sales) 'SalesGroupActivity

 public class SalesActivityGroup extends ActivityGroup {

public static SalesActivityGroup group;
private ArrayList<View> history;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    this.history = new ArrayList<View>();
    group = this;

    View view = getLocalActivityManager().startActivity("Sales",
            new Intent(this, SalesRouteActivity.class).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP))
            .getDecorView();

    replaceView(view);

}

public void replaceView(View v) {
    history.add(v);
    setContentView(v);

}

public void back() {
    if (history.size() > 0) {
        history.remove(history.size() - 1);
        if (history.size() > 0) {
            setContentView(history.get(history.size() - 1));
        } else {
            finish();
        }
    } else {
        finish();
    }
}

@Override
public void onBackPressed() {
    SalesActivityGroup.group.back();
    return;
}

Отредактировано Это первое действие FirstTab - SalesRouteActivity

    public class SalesRouteActivity extends ListActivity{
     TableLayout tl;
     static int positions = 0;
     static String keyword ="";
     int uploadSize = 0;
     private NotificationManager mNotificationManager;
     private int SIMPLE_NOTFICATION_ID;
     String strBusinessUnit = "";   
     String strExecutive = "";
     String strTerritoryCode = "";
     SimpleAdapter sd;
     View row = null;
     View selectRow = null;

     @Override
     public void onCreate(Bundle savedInstanceState) {

         super.onCreate(savedInstanceState);
         setContentView(R.layout.sales_routes);

         SharedPreferences myPrefs = this.getSharedPreferences("myLogedPrefs",MODE_WORLD_READABLE);
         strBusinessUnit = myPrefs.getString("BusinessUnit", "");
         strExecutive = myPrefs.getString("Executive", "");
         strTerritoryCode = myPrefs.getString("TerritoryCode", "");

         ArrayList<SalesRoutes> routeList = getSalesRoute();

         ArrayList<HashMap<String, String>> routhPath = new ArrayList<HashMap<String, String>>();
         for (int i = 0; i < routeList.size(); i++) {
            if(Integer.parseInt(routeList.get(i).getOutlets()) >0){
                HashMap<String, String> map = new HashMap<String, String>();
                map.put("routeCode",((SalesRoutes) routeList.get(i)).getRouteCode());
                map.put("routeName",((SalesRoutes) routeList.get(i)).getDescription());
                map.put("outlets", ((SalesRoutes) routeList.get(i)).getOutlets());
                routhPath.add(map);
             }
         }

         ListView list = getListView();
         sd = new SimpleAdapter(this, routhPath, R.layout.route_path,new String[] {"routeCode","routeName","outlets" },new int[] { R.id.routeCode,R.id.routeName,R.id.outlets});
         row = getLayoutInflater().inflate(R.layout.route_path_row, null, false);
         getListView().addHeaderView(row);
         list.setAdapter(sd);
         list.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
        list.setSelected(true);
        list.setTextFilterEnabled(true);
        list.setItemsCanFocus(true);
        list.setItemChecked(positions, true);
        list.setSelectionAfterHeaderView();

        if (routeList.size() > 0) {
            keyword = routeList.get(0).getRouteCode();
        }

        uploadSize = new UploadActivity().getUploadTable();

        if (uploadSize > 0) {
            mNotificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
            final Notification notifyDetails = new Notification(R.drawable.icon, "New Alert, Click Me!",System.currentTimeMillis());
            Context context = getApplicationContext();
            CharSequence contentTitle = "Upload Available...";
            CharSequence contentText = "Browse Android Official Site by clicking me";
            Intent notifyIntent = new Intent(android.content.Intent.ACTION_VIEW,Uri.parse("http://www.android.com"));
            PendingIntent intent = PendingIntent.getActivity(SalesRouteActivity.this, 0, notifyIntent,android.content.Intent.FLAG_ACTIVITY_NEW_TASK);
            notifyDetails.setLatestEventInfo(context, contentTitle,contentText, intent);
            mNotificationManager.notify(SIMPLE_NOTFICATION_ID, notifyDetails);
        }
    }

    @SuppressWarnings("unchecked")
    @Override
    protected void onListItemClick(ListView l, View v, int position, long id) {
        super.onListItemClick(l, v, position, id);
        HashMap<String, String> hashMap = (HashMap<String, String>) l.getItemAtPosition(position);
        keyword = hashMap.get("routeCode");

        positions = position;
        if(position == 0 ){


        }else if(position != 1){
            Intent showContent = new Intent(v.getContext(),SalesRouteDevitionActivity.class);
            Bundle bundle = new Bundle();
            bundle.putString("RouteCode", keyword);
            showContent.putExtras(bundle);
            getParent().startActivityForResult(showContent, 5);
        }else{
            Intent intent = new Intent(SalesRouteActivity.this, ListRetailerActivity.class);
            Bundle bundle = new Bundle();
            bundle.putString("RouteName", keyword);
            intent.putExtras(bundle);
            View view = SalesActivityGroup.group.getLocalActivityManager().startActivity("", intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)).getDecorView();  
            SalesActivityGroup.group.replaceView(view);

        }
    }

    @Override  
    public void onBackPressed() {  
        SalesActivityGroup.group.back();  
    } 

    @SuppressWarnings({ "rawtypes", "unchecked" })
    public ArrayList<SalesRoutes> getSalesRoute(){
         DBAdapter dbAdapter = DBAdapter.getDBAdapterInstance(this);
          try {
              dbAdapter.createDataBase();
         } catch (IOException e) {
              Log.i("*** select ",e.getMessage());
         }
         dbAdapter.openDataBase();       
         String sql = "SELECT RouteCode, Description, OutletsAttached  " +
                       "FROM WMRoute  " +
                       "WHERE ActiveStatus = '1' AND  RouteDefaultExecutive = ? AND  BusinessUnit = ? AND TerritoryCode = ?  " +
                       "ORDER BY RouteCode  ";

         String[]d = new String[]{strExecutive,strBusinessUnit,strTerritoryCode};
         ArrayList stringList = dbAdapter.selectRecordsFromDBList(sql, d);
         dbAdapter.close();
         ArrayList<SalesRoutes> salesRoutesList = new ArrayList<SalesRoutes>();
         for (int i = 0; i < stringList.size(); i++) {
            ArrayList<Object> arrayList = (ArrayList<Object>) stringList.get(i);
            ArrayList<Object> list = arrayList;
            SalesRoutes salesRoutes = new SalesRoutes();
            try {
                salesRoutes.setRouteCode((String) list.get(0));
                salesRoutes.setDescription((String) list.get(1));
                salesRoutes.setOutlets((String)list.get(2));

            } catch (Exception e) {
                Log.i("***" + SalesRouteActivity.class.toString(), e.getMessage());
            }
            salesRoutesList.add(salesRoutes);
        }
        return salesRoutesList;
    }
}

вероятно, мои группы активности создаются снова и снова при переключении между вкладками Таким образом, группы хотят создать только один раз и возобновить, когда я переключаюсь между вкладками

Информация о каждом экране / получение содержимого из базы данных.

Я сталкиваюсь с этой проблемой более 2 дней .... Пожалуйста, помогите мне. Пожалуйста, помогите мне в этом ....

Заранее спасибо .....

Ответы [ 6 ]

5 голосов
/ 17 августа 2011

Группы действий, которые вы создали, будут содержать текущее представление активности, если вы его не измените, не изменится. Поэтому при переходе между вкладками группы действий, назначенные этим вкладкам, не изменят свои представления. 1001 *

Вы можете попробовать это ...

Для каждого из ваших действий вы должны переопределить onBackPressed() ...

@Override  
public void onBackPressed() {  
       ActivityGroupRelatedToThisActivity.group.back();  
} 

Также помните не звоните super.onBackPressed() ни в одну из ваших Активностей, которая связана с группой действий

Или

Изменить private ArrayList<View> history на static private ArrayList<View> history

и

if(history.size() == 0) replaceView(view); 

in ActivityGroup s onCreate() method

5 голосов
/ 17 августа 2011

Я думаю, что вы должны переопределить onBackPressed() внутри действий, которые вы открываете в activity-group

Напишите код ниже в каждое действие , которое вы открываете в группе действий

@Override  
public void onBackPressed() {  
       SalesActivityGroup.group.back();  
} 

А также замените onBackPressed() на следующий код в TABHOST

@Override
public void onBackPressed() {
    super.onBackPressed();
}

Удачи

2 голосов
/ 17 августа 2011

Я думаю, что у вас есть проблема в back () ActivityGroup, попробуйте это.

public void back()
{
    if ( history.size() > 1 )
    {
       history.remove(history.size() - 1);
       View v = arrList.get(history.size() - 1);
       setContentView(v);
    }
    else {
       this.finish();
    }
}
1 голос
/ 18 августа 2011

Спасибо всем;

В моей MainActivity возникли проблемы.

 tabHost = getTabHost();
    TabHost.TabSpec spec;
    Intent intent;


    intent = new Intent().setClass(this, SalesActivityGroup.class);  
    spec = getTabHost().newTabSpec("Sales").setIndicator("Sales",getResources().getDrawable(R.drawable.ic_tab_artists_grey)).setContent(intent);
    tabHost.addTab(spec);

    intent = new Intent().setClass(this, SettingActivityGroup.class);  
    spec = getTabHost().newTabSpec("Admin").setIndicator("Admin",getResources().getDrawable(R.drawable.admin)).setContent(intent);
    tabHost.addTab(spec);

    intent = new Intent().setClass(this, SettingActivityGroup.class);  
    spec = getTabHost().newTabSpec("Setting").setIndicator("Setting",getResources().getDrawable(R.drawable.ic_tab_artists_grey)).setContent(intent);
    tabHost.addTab(spec);

    intent = new Intent().setClass(this, SettingActivityGroup.class);  
    spec = getTabHost().newTabSpec("Inquiry").setIndicator("Inquiry",getResources().getDrawable(R.drawable.ic_tab_artists_grey)).setContent(intent);
    tabHost.addTab(spec);


    tabHost.setCurrentTab(0);
    tabHost.setMinimumHeight(18);
    tabHost.setFadingEdgeLength(5);
    tabHost.setFocusable(true); 
    tabHost.requestFocus();
    tabHost.setFadingEdgeLength(5);
  }
}

И я согласен @Vaibhav Jani @Dharmendra @Suri, я пропустил onKeyPressed () во всех действиях.1006 *

1 голос
/ 17 августа 2011

Этот ответ поможет вам.Я использовал групповую активность для своих вкладок.Дайте мне знать, если проблема не устранена

Почему кнопка «Назад» не обнаруживается в действиях с вкладкой «Мути»?

0 голосов
/ 04 августа 2011

Я видел ваше обновление. Я не уверен, как ответить на ваш вопрос. Возможно, вы можете сохранить информацию о том, какое представление в настоящее время воспроизводится в onSavedInstanceState, извлечь данные в onRestoreInstancestate и использовать его для воссоздания представления. Как примечание: ActivityGroup устарела и была заменена на Fragment API.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...