揭秘uc浏览器三

这节我们主要讨论收藏与历史记录页面的边边角角。

首先,看看他的最终的效果图了:

照例了,我们先看看他的布局文件:

 1 <!-- tab布局文件 -->
 2 <TabHost xmlns:android="http://schemas.android.com/apk/res/android"
 3     android:id="@android:id/tabhost"
 4     android:layout_width="fill_parent"
 5     android:layout_height="fill_parent">
 6     <LinearLayout
 7         android:orientation="vertical"
 8         android:layout_width="fill_parent"
 9         android:layout_height="fill_parent"
10         android:padding="5dp">
11         <TabWidget
12             android:id="@android:id/tabs"
13             android:layout_width="fill_parent"
14             android:layout_height="wrap_content" />
15         <!-- 相应桢布局 -->
16         <FrameLayout
17             android:id="@android:id/tabcontent"
18             android:layout_width="fill_parent"
19             android:layout_height="fill_parent"
20             android:padding="5dp" />
21     </LinearLayout>
22 </TabHost>

相应的布局文件说明如下:

别开这是一个布局文件其实涉及另外两个布局文件,相应布局文件是左右两边布局文件。他两个布局文件源代码又是怎么样了?一个是书签页面的布局文件,一个是历史记录的布局文件。但是布局文件共拥有一个布局文件。

相应源代码如下:

 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2     android:layout_width="fill_parent"
 3     android:layout_height="fill_parent">
 4     <!-- list 控件 -->
 5     <ListView
 6           android:id="@+id/BookmarksListActivity.List"
 7         android:layout_width="fill_parent"
 8         android:layout_height="fill_parent"/>
 9         <!-- 文本控件 -->
10   <TextView android:id="@+id/BookmarksListActivity.EmptyTextView"
11         android:layout_width="fill_parent"
12         android:layout_height="wrap_content"
13         android:gravity="center_horizontal"
14         android:layout_gravity="center_vertical"
15         android:text="@string/BookmarksListActivity.Empty"/>
16
17 </LinearLayout>

一个list控件加一个文本控件就ok了。

布局文件,一直都不是android工程中重头戏。java文件又是什么样子了?

我们来看看他所涉及的相应的java文件。

 首先,我们看一下书签历史记录页面的java 源代码,他在这里的控制作用也只有一种抛砖引玉的作用了.

 1 /**
 2  * 这是一个historyactivity
 3  */
 4 public class BookmarksHistoryActivity extends TabActivity {
 5
 6     /**
 7      * 创建的方法
 8      */
 9     @Override
10     protected void onCreate(Bundle savedInstanceState) {
11         super.onCreate(savedInstanceState);
12
13         if (Controller.getInstance().getPreferences().getBoolean(Constants.PREFERENCES_SHOW_FULL_SCREEN, false)) {
14             getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
15         }
16
17         if (Controller.getInstance().getPreferences().getBoolean(Constants.PREFERENCES_GENERAL_HIDE_TITLE_BARS, true)) {
18             requestWindowFeature(Window.FEATURE_NO_TITLE);
19         }
20
21         setContentView(R.layout.bookmarks_history_activity);
22
23         setTitle(R.string.BookmarksListActivity_Title);
24
25         Resources res = getResources();
26         TabHost tabHost = getTabHost();
27         TabHost.TabSpec spec;
28         Intent intent;
29
30         // Bookmarks
31         intent = new Intent().setClass(this, BookmarksListActivity.class);
32
33         spec = tabHost.newTabSpec("bookmarks").setIndicator(res.getString(R.string.Main_MenuShowBookmarks),
34                 res.getDrawable(R.drawable.ic_tab_bookmarks))
35                 .setContent(intent);
36         tabHost.addTab(spec);
37
38         // History
39         intent = new Intent().setClass(this, HistoryListActivity.class);
40
41         spec = tabHost.newTabSpec("history").setIndicator(res.getString(R.string.Main_MenuShowHistory),
42                 res.getDrawable(R.drawable.ic_tab_history))
43                 .setContent(intent);
44         tabHost.addTab(spec);
45
46         if (PreferenceManager.getDefaultSharedPreferences(this).getBoolean(Constants.PREFERENCE_USE_WEAVE, false)) {
47             // Weave bookmarks
48             intent = new Intent().setClass(this, WeaveBookmarksListActivity.class);
49
50             spec = tabHost.newTabSpec("weave").setIndicator(res.getString(R.string.WeaveBookmarksListActivity_Title),
51                     res.getDrawable(R.drawable.ic_tab_weave))
52                     .setContent(intent);
53             tabHost.addTab(spec);
54         }
55
56         tabHost.setCurrentTab(0);
57
58         tabHost.setOnTabChangedListener(new OnTabChangeListener() {
59             @Override
60             public void onTabChanged(String tabId) {
61                 if (tabId.equals("bookmarks")) {
62                     setTitle(R.string.BookmarksListActivity_Title);
63                 } else if (tabId.equals("history")) {
64                     setTitle(R.string.HistoryListActivity_Title);
65                 } else if (tabId.equals("weave")) {
66                     setTitle(R.string.WeaveBookmarksListActivity_Title);
67                 } else {
68                     setTitle(R.string.ApplicationName);
69                 }
70             }
71         });
72     }
73
74     /**
75      * 配置文件改变的方法
76      */
77     @Override
78     public void onConfigurationChanged(Configuration newConfig) {
79         super.onConfigurationChanged(newConfig);
80     }
81 }

我们可以总结出来以下几个结果:

①在oncreate这个方法中,能否全频,能否有标题,这些设置的配置的参数就是存在与preference这个参数中的,可以sharedpreference这个对象保存配置参数,这也是android官方推荐的一种方式。

②一看这个布局的方式,这是一个典型tab布局,因此我们要实例化相应tabhost文件,并且为相应tabhost赋值事件,进入不同的intent,并且进入不同的界面后,赋值相应的标题。

③将相应的配置文件改变以后的,父类的配置文件也进行相应的改变。

由于要跳往不同的界面,所以就需要两个文件控制。

 首先看一下 BookmarksListActivity中的控制文件,相应的源代码如下:

  1 public class BookmarksListActivity extends Activity {
  2
  3     private static final int MENU_ADD_BOOKMARK = Menu.FIRST;
  4     private static final int MENU_SORT_MODE = Menu.FIRST + 1;
  5
  6     private static final int MENU_OPEN_IN_TAB = Menu.FIRST + 10;
  7     private static final int MENU_COPY_URL = Menu.FIRST + 11;
  8     private static final int MENU_SHARE = Menu.FIRST + 12;
  9     private static final int MENU_EDIT_BOOKMARK = Menu.FIRST + 13;
 10     private static final int MENU_DELETE_BOOKMARK = Menu.FIRST + 14;
 11
 12     private static final int ACTIVITY_ADD_BOOKMARK = 0;
 13     private static final int ACTIVITY_EDIT_BOOKMARK = 1;
 14
 15     private Cursor mCursor;
 16     private BookmarksCursorAdapter mCursorAdapter;
 17
 18     private ListView mList;
 19
 20     @Override
 21     public void onCreate(Bundle savedInstanceState) {
 22         super.onCreate(savedInstanceState);
 23         setContentView(R.layout.bookmarks_list_activity);
 24
 25         setTitle(R.string.BookmarksListActivity_Title);
 26
 27         View emptyView = findViewById(R.id.BookmarksListActivity_EmptyTextView);
 28         mList = (ListView) findViewById(R.id.BookmarksListActivity_List);
 29
 30         mList.setEmptyView(emptyView);
 31
 32         mList.setOnItemClickListener(new OnItemClickListener() {
 33
 34             @Override
 35             public void onItemClick(AdapterView<?> l, View v, int position, long id) {
 36                 Intent result = new Intent();
 37                 result.putExtra(Constants.EXTRA_ID_NEW_TAB, false);
 38
 39                 BookmarkItem item = BookmarksProviderWrapper.getStockBookmarkById(getContentResolver(), id);
 40                 if (item != null) {
 41                     result.putExtra(Constants.EXTRA_ID_URL,  item.getUrl());
 42                 } else {
 43                     result.putExtra(Constants.EXTRA_ID_URL,
 44                             PreferenceManager.getDefaultSharedPreferences(BookmarksListActivity.this).getString(Constants.PREFERENCES_GENERAL_HOME_PAGE, Constants.URL_ABOUT_START));
 45                 }
 46
 47                 if (getParent() != null) {
 48                     getParent().setResult(RESULT_OK, result);
 49                 } else {
 50                     setResult(RESULT_OK, result);
 51                 }
 52
 53                 finish();
 54             }
 55         });
 56
 57         registerForContextMenu(mList);
 58
 59         fillData();
 60     }
 61
 62     @Override
 63     protected void onDestroy() {
 64         mCursor.close();
 65         super.onDestroy();
 66     }
 67
 68     /**
 69      * Fill the bookmark to the list UI.
 70      */
 71     private void fillData() {
 72         mCursor = BookmarksProviderWrapper.getStockBookmarks(getContentResolver(),
 73                 PreferenceManager.getDefaultSharedPreferences(this).getInt(Constants.PREFERENCES_BOOKMARKS_SORT_MODE, 0));
 74         startManagingCursor(mCursor);
 75
 76         String[] from = new String[] { Browser.BookmarkColumns.TITLE, Browser.BookmarkColumns.URL};
 77         int[] to = new int[] {R.id.BookmarkRow_Title, R.id.BookmarkRow_Url};
 78
 79         mCursorAdapter = new BookmarksCursorAdapter(this,
 80                 R.layout.bookmark_row,
 81                 mCursor,
 82                 from,
 83                 to,
 84                 ApplicationUtils.getFaviconSizeForBookmarks(this));
 85
 86         mList.setAdapter(mCursorAdapter);
 87
 88         setAnimation();
 89     }
 90
 91     /**
 92      * Set the list loading animation.
 93      */
 94     private void setAnimation() {
 95         AnimationSet set = new AnimationSet(true);
 96
 97         Animation animation = new AlphaAnimation(0.0f, 1.0f);
 98         animation.setDuration(100);
 99         set.addAnimation(animation);
100
101         animation = new TranslateAnimation(
102             Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF, 0.0f,
103             Animation.RELATIVE_TO_SELF, -1.0f, Animation.RELATIVE_TO_SELF, 0.0f
104         );
105         animation.setDuration(100);
106         set.addAnimation(animation);
107
108         LayoutAnimationController controller =
109                 new LayoutAnimationController(set, 0.5f);
110
111         mList.setLayoutAnimation(controller);
112     }
113
114     /**
115      * Display the add bookmark dialog.
116      */
117     private void openAddBookmarkDialog() {
118         Intent i = new Intent(this, EditBookmarkActivity.class);
119
120         i.putExtra(Constants.EXTRA_ID_BOOKMARK_ID, (long) -1);
121         i.putExtra(Constants.EXTRA_ID_BOOKMARK_TITLE, "");
122         i.putExtra(Constants.EXTRA_ID_BOOKMARK_URL, "");
123
124         startActivityForResult(i, ACTIVITY_ADD_BOOKMARK);
125     }
126
127     @Override
128     public boolean onCreateOptionsMenu(Menu menu) {
129         super.onCreateOptionsMenu(menu);
130
131         MenuItem item;
132         item = menu.add(0, MENU_ADD_BOOKMARK, 0, R.string.BookmarksListActivity_MenuAddBookmark);
133         item.setIcon(R.drawable.ic_menu_add_bookmark);
134
135         item = menu.add(0, MENU_SORT_MODE, 0, R.string.BookmarksListActivity_MenuSortMode);
136         item.setIcon(R.drawable.ic_menu_sort);
137
138         return true;
139     }
140
141     @Override
142     public boolean onMenuItemSelected(int featureId, MenuItem item) {
143
144         switch(item.getItemId()) {
145         case MENU_SORT_MODE:
146             changeSortMode();
147             return true;
148
149         case MENU_ADD_BOOKMARK:
150             openAddBookmarkDialog();
151             return true;
152
153         default: return super.onMenuItemSelected(featureId, item);
154         }
155     }
156
157     @Override
158     public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
159         super.onCreateContextMenu(menu, v, menuInfo);
160
161         long id = ((AdapterContextMenuInfo) menuInfo).id;
162         if (id != -1) {
163             BookmarkItem item = BookmarksProviderWrapper.getStockBookmarkById(getContentResolver(), id);
164             if (item != null) {
165                 menu.setHeaderTitle(item.getTitle());
166             }
167         }
168
169         menu.add(0, MENU_OPEN_IN_TAB, 0, R.string.BookmarksListActivity_MenuOpenInTab);
170         menu.add(0, MENU_COPY_URL, 0, R.string.BookmarksHistoryActivity_MenuCopyLinkUrl);
171         menu.add(0, MENU_SHARE, 0, R.string.Main_MenuShareLinkUrl);
172         menu.add(0, MENU_EDIT_BOOKMARK, 0, R.string.BookmarksListActivity_MenuEditBookmark);
173         menu.add(0, MENU_DELETE_BOOKMARK, 0, R.string.BookmarksListActivity_MenuDeleteBookmark);
174     }
175
176     @Override
177     public boolean onContextItemSelected(MenuItem item) {
178         AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
179
180         Intent i;
181         BookmarkItem bookmarkItem = BookmarksProviderWrapper.getStockBookmarkById(getContentResolver(), info.id);
182
183         switch (item.getItemId()) {
184         case MENU_OPEN_IN_TAB:
185             i = new Intent();
186             i.putExtra(Constants.EXTRA_ID_NEW_TAB, true);
187
188             if (bookmarkItem != null) {
189                 i.putExtra(Constants.EXTRA_ID_URL,  bookmarkItem.getUrl());
190             } else {
191                 i.putExtra(Constants.EXTRA_ID_URL,
192                         PreferenceManager.getDefaultSharedPreferences(BookmarksListActivity.this).getString(Constants.PREFERENCES_GENERAL_HOME_PAGE, Constants.URL_ABOUT_START));
193             }
194
195             if (getParent() != null) {
196                 getParent().setResult(RESULT_OK, i);
197             } else {
198                 setResult(RESULT_OK, i);
199             }
200
201             finish();
202             return true;
203
204         case MENU_EDIT_BOOKMARK:
205             if (bookmarkItem != null) {
206                 i = new Intent(this, EditBookmarkActivity.class);
207                 i.putExtra(Constants.EXTRA_ID_BOOKMARK_ID, info.id);
208                 i.putExtra(Constants.EXTRA_ID_BOOKMARK_TITLE, bookmarkItem.getTitle());
209                 i.putExtra(Constants.EXTRA_ID_BOOKMARK_URL, bookmarkItem.getUrl());
210
211                 startActivityForResult(i, ACTIVITY_EDIT_BOOKMARK);
212             }
213             return true;
214
215         case MENU_COPY_URL:
216             if (bookmarkItem != null) {
217                 ApplicationUtils.copyTextToClipboard(this,  bookmarkItem.getUrl(), getString(R.string.Commons_UrlCopyToastMessage));
218             }
219             return true;
220
221         case MENU_SHARE:
222             if (bookmarkItem != null) {
223                 ApplicationUtils.sharePage(this, bookmarkItem.getTitle(), bookmarkItem.getUrl());
224             }
225             return true;
226
227         case MENU_DELETE_BOOKMARK:
228             //mDbAdapter.deleteBookmark(info.id);
229             BookmarksProviderWrapper.deleteStockBookmark(getContentResolver(), info.id);
230             fillData();
231             return true;
232         default: return super.onContextItemSelected(item);
233         }
234     }
235
236     /**
237      * Change list sort mode. Update list.
238      * @param sortMode The new sort mode.
239      */
240     private void doChangeSortMode(int sortMode) {
241         Editor editor = PreferenceManager.getDefaultSharedPreferences(this).edit();
242         editor.putInt(Constants.PREFERENCES_BOOKMARKS_SORT_MODE, sortMode);
243         editor.commit();
244
245         fillData();
246     }
247
248     /**
249      * Show a dialog for choosing the sort mode.
250      * Perform the change if required.
251      */
252     private void changeSortMode() {
253
254         int currentSort = PreferenceManager.getDefaultSharedPreferences(this).getInt(Constants.PREFERENCES_BOOKMARKS_SORT_MODE, 0);
255
256         AlertDialog.Builder builder = new AlertDialog.Builder(this);
257         builder.setInverseBackgroundForced(true);
258         builder.setIcon(android.R.drawable.ic_dialog_info);
259         builder.setTitle(getResources().getString(R.string.BookmarksListActivity_MenuSortMode));
260         builder.setSingleChoiceItems(new String[] {getResources().getString(R.string.BookmarksListActivity_MostUsedSortMode),
261                 getResources().getString(R.string.BookmarksListActivity_AlphaSortMode),
262                 getResources().getString(R.string.BookmarksListActivity_RecentSortMode) },
263                 currentSort,
264                 new OnClickListener() {
265             @Override
266             public void onClick(DialogInterface dialog, int which) {
267                 doChangeSortMode(which);
268                 dialog.dismiss();
269             }
270         });
271         builder.setCancelable(true);
272         builder.setNegativeButton(R.string.Commons_Cancel, null);
273
274         AlertDialog alert = builder.create();
275         alert.show();
276     }
277
278     @Override
279     protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
280         super.onActivityResult(requestCode, resultCode, intent);
281
282         switch (requestCode) {
283         case ACTIVITY_EDIT_BOOKMARK:
284             if (resultCode == RESULT_OK) {
285                 fillData();
286             }
287             break;
288         case ACTIVITY_ADD_BOOKMARK:
289             if (resultCode == RESULT_OK) {
290                 fillData();
291             }
292             break;
293
294         default:
295             break;
296         }
297     }
298
299 }

①同理在oncreate方法,实例化相应的listview,把从ContentResolver取得的网址信息,添加到相应的listview中去,并且为listview赋值与每项目的点击事件,每项的点击跳转到相应的界面上去。同时结束当前的界面。

②在方法中实现数据的填充,同时还为列表绑定上下文菜单。

③程序也是一环扣一环的,那么这个fillData方法是加载数据的方法,又是如何实现的了,把数据库存标签的数据按照一定方式(分页的方式)读取出来,并且加载到相应的列表上去。这个加载数据的过程中有一个淡入淡出动画的效果。

④你要添加这个标签对话框也是在此界面上完成这个功能的,我们用了回调结果intent来跳转到相应编辑标签的界面,编辑标签以后,在到回调结果方法中重新进行相应数据的重新初始化。

⑤这个文件大量的篇幅用于一些上下文菜单的处理,分别对相应在tab打开网页菜单,编辑标签的菜单,复制URL的菜单,分享的菜单,删除菜单的事件做一个处理。

接下来,是一个HistoryListActivity源代码控制文件的解析。源代码如下:

/**
 * history list activity.
 */
public class HistoryListActivity extends ExpandableListActivity {

    private static final int MENU_CLEAR_HISTORY = Menu.FIRST;

    private static final int MENU_OPEN_IN_TAB = Menu.FIRST + 10;
    private static final int MENU_COPY_URL = Menu.FIRST + 11;
    private static final int MENU_SHARE = Menu.FIRST + 12;
    private static final int MENU_DELETE_FROM_HISTORY = Menu.FIRST + 13;

    private ExpandableListAdapter mAdapter;

    private ProgressDialog mProgressDialog;

    private OnCheckedChangeListener mBookmarkStarChangeListener;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setTitle(R.string.HistoryListActivity_Title);

        registerForContextMenu(getExpandableListView());

        mBookmarkStarChangeListener = new OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                long id = (Long) buttonView.getTag();
                BookmarksProviderWrapper.toggleBookmark(getContentResolver(), id, isChecked);

                if (isChecked) {
                    Toast.makeText(HistoryListActivity.this, R.string.HistoryListActivity_BookmarkAdded, Toast.LENGTH_SHORT).show();
                } else {
                    Toast.makeText(HistoryListActivity.this, R.string.HistoryListActivity_BookmarkRemoved, Toast.LENGTH_SHORT).show();
                }
            }
        };

        fillData();
    }

    /**
     * Fill the history list.
     */
    private void fillData() {
        Cursor c = BookmarksProviderWrapper.getStockHistory(getContentResolver());

        mAdapter = new HistoryExpandableListAdapter(
                this,
                mBookmarkStarChangeListener,
                c,
                c.getColumnIndex(Browser.BookmarkColumns.DATE),
                ApplicationUtils.getFaviconSizeForBookmarks(this));

        setListAdapter(mAdapter);

        if (getExpandableListAdapter().getGroupCount() > 0) {
            getExpandableListView().expandGroup(0);
        }
    }

    @Override
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
        super.onCreateContextMenu(menu, v, menuInfo);

        ExpandableListView.ExpandableListContextMenuInfo info =
            (ExpandableListView.ExpandableListContextMenuInfo) menuInfo;

        int type = ExpandableListView.getPackedPositionType(info.packedPosition);
        int group = ExpandableListView.getPackedPositionGroup(info.packedPosition);
        int child =    ExpandableListView.getPackedPositionChild(info.packedPosition);

        if (type == ExpandableListView.PACKED_POSITION_TYPE_CHILD) {

            HistoryItem item = (HistoryItem) getExpandableListAdapter().getChild(group, child);
            menu.setHeaderTitle(item.getTitle());

            menu.add(0, MENU_OPEN_IN_TAB, 0, R.string.HistoryListActivity_MenuOpenInTab);
            menu.add(0, MENU_COPY_URL, 0, R.string.BookmarksHistoryActivity_MenuCopyLinkUrl);
            menu.add(0, MENU_SHARE, 0, R.string.Main_MenuShareLinkUrl);
            menu.add(0, MENU_DELETE_FROM_HISTORY, 0, R.string.HistoryListActivity_MenuDelete);
        }
    }

    @Override
    public boolean onContextItemSelected(MenuItem menuItem) {
        ExpandableListContextMenuInfo info = (ExpandableListContextMenuInfo) menuItem.getMenuInfo();

        int type = ExpandableListView.getPackedPositionType(info.packedPosition);

        if (type == ExpandableListView.PACKED_POSITION_TYPE_CHILD) {
            int group = ExpandableListView.getPackedPositionGroup(info.packedPosition);
            int child =    ExpandableListView.getPackedPositionChild(info.packedPosition);

            HistoryItem item = (HistoryItem) getExpandableListAdapter().getChild(group, child);

            switch (menuItem.getItemId()) {
            case MENU_OPEN_IN_TAB:
                doNavigateToUrl(item.getUrl(), true);
                break;
            case MENU_COPY_URL:
                ApplicationUtils.copyTextToClipboard(this, item.getUrl(), getString(R.string.Commons_UrlCopyToastMessage));
                break;
            case MENU_SHARE:
                ApplicationUtils.sharePage(this, item.getTitle(), item.getUrl());
                break;
            case MENU_DELETE_FROM_HISTORY:
                BookmarksProviderWrapper.deleteHistoryRecord(getContentResolver(), item.getId());
                fillData();
                break;
            default:
                break;
            }
        }

        return super.onContextItemSelected(menuItem);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        super.onCreateOptionsMenu(menu);

        MenuItem item;
        item = menu.add(0, MENU_CLEAR_HISTORY, 0, R.string.Commons_ClearHistory);
        item.setIcon(R.drawable.ic_menu_delete);

        return true;
    }

    @Override
    public boolean onMenuItemSelected(int featureId, MenuItem item) {

        switch(item.getItemId()) {
        case MENU_CLEAR_HISTORY:
            clearHistory();
            return true;
        default: return super.onMenuItemSelected(featureId, item);
        }
    }

    @Override
    public boolean onChildClick(ExpandableListView parent, View v,    int groupPosition, int childPosition, long id) {
        HistoryItem item = (HistoryItem) getExpandableListAdapter().getChild(groupPosition, childPosition);
        doNavigateToUrl(item.getUrl(), false);

        return super.onChildClick(parent, v, groupPosition, childPosition, id);
    }

    /**
     * Load the given url.
     * @param url The url.
     * @param newTab If True, will open a new tab. If False, the current tab is used.
     */
    private void doNavigateToUrl(String url, boolean newTab) {
        Intent result = new Intent();
        result.putExtra(Constants.EXTRA_ID_NEW_TAB, newTab);
        result.putExtra(Constants.EXTRA_ID_URL,  url);

        if (getParent() != null) {
            getParent().setResult(RESULT_OK, result);
        } else {
            setResult(RESULT_OK, result);
        }
        finish();
    }

    /**
     * Clear history.
     */
    private void doClearHistory() {
        mProgressDialog = ProgressDialog.show(this,
                this.getResources().getString(R.string.Commons_PleaseWait),
                this.getResources().getString(R.string.Commons_ClearingHistory));

        new HistoryClearer();
    }

    /**
     * Display confirmation and clear history.
     */
    private void clearHistory() {
        ApplicationUtils.showYesNoDialog(this,
                android.R.drawable.ic_dialog_alert,
                R.string.Commons_ClearHistory,
                R.string.Commons_NoUndoMessage,
                new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        dialog.dismiss();
                        doClearHistory();
                    }
        });
    }

    /**
     * Runnable to clear history.
     */
    private class HistoryClearer implements Runnable {

        /**
         * Constructor.
         */
        public HistoryClearer() {
            new Thread(this).start();
        }

        @Override
        public void run() {
            BookmarksProviderWrapper.clearHistoryAndOrBookmarks(getContentResolver(), true, false);

            for (CustomWebView webView : Controller.getInstance().getWebViewList()) {
                webView.clearHistory();
            }

            handler.sendEmptyMessage(0);
        }

        private Handler handler = new Handler() {
            public void handleMessage(Message msg) {
                mProgressDialog.dismiss();
                fillData();
            }
        };
    }

}

观察相应的源代码了,我们可想而知其大体与标签列表界面的大体一样,上面说过方法就不做过多的赘述了,这里我们只需要阐述了为什么要HistoryClearer这个开启线程来清空历史记录。 首先原因有二:

①由于打开网页是很多很多,这里面数据还是很多很多。

②正视由于数据量大,这是一个耗时操作,如果放在一个ui线程中势必会造成页面假使,极大的影响了用户体验。开启一个线程,使其在回调后,更新界面,符合提升用户体验的原则。

我们再这里可以得出来这样android开发的原则:凡是耗时操作,应该开启多线程,再相应线程回调完成后再更新界面。

这就是我对标签记录页面总结,和一点点总结。

时间: 2024-10-11 12:08:12

揭秘uc浏览器三的相关文章

揭秘uc浏览器四

请问大家用过uc浏览器,他收藏一个网页是怎么操作的? 是不是这样,按菜单键--弹出添加网页,收藏网页等等的菜单操作,这个菜单操作很人性化了,并且在前面的篇幅已经说过了,这里不做太多的赘述了. 我这里只说一说添加书签这个页面怎么的实现了. 这个添加书签的页面布局文件如下所示: 由布局文件,我们可以推断出,一定是你点击了添加书签的以后,再将其网址名称,和网址保存到文本框,让用户得以编辑,进一步提升用户体验,是这样的吗? 丑媳妇总要见公婆,是亮代码,解开谜底的时候了,源代码如下: /** * Add

揭秘uc浏览器二

这节,四个议题: ①一个网页显示在webview控件中 ②如何正常隐藏显示标题栏. ③如何用runnable来隐藏标题栏,这样子就更加的专业化. ④上节我们说道了QuickActionGrid,看他长得怎么样. 如何显示webview控件了,This is a question?这个除了上面的文章的支持外,主要是这个updateUI的方法. /** * Update the UI: Url edit text, previous/next button state,... */ private

UC浏览器领军移动互联网的三要素

中介交易 SEO诊断 淘宝客 云主机 技术大厅 UC浏览器为何领跑全球手机互联网市场?我认为这并不是空穴来风,也并非偶然.UC影视的成功归结于其对移动互联网的投入和对其预见未来手机终端的潜在的能量,事实证明,越来越多的手机用户对移动互联网的要求与日俱增,单纯的能满足用户浏览网页已不再是主要目标,而如何提高浏览网页的效率却成为各个手机终端研发公司的主要任务.UC作为这一行业的领军者,有什么成功的秘籍呢? 据我个人分析,其成功主要有三个要素.第一,对未来手机互联网抱有很高的期待,自2004年8月,U

手机UC浏览器怎么修改UA标识

  手机UC浏览器怎么修改UA标识?对于很多人来说,可能还不了解手机UC浏览器UA标识是什么.不过,有部分用户在问,手机UC浏览器怎么修改UA标识?接下来,就和小编一起来看看手机UC浏览器修改UA标识教程. 1:打开手机UC浏览器,点击"三" 手机UC浏览器修改UA标识 2:点击设置按钮 手机UC浏览器修改UA标识 3:下拉,找到"浏览设置" 4:拉到底部.找到浏览器标识(UA),选择. 手机UC浏览器修改UA标识 5:小编用的是安卓系统的手机,进入同一个网站的对比

手机uc浏览器怎么下载视频

  手机uc浏览器怎么下载视频 第一步 打开UC浏览器,在首页我们可以看到UC为用户推荐的内容,当然我们要找的视频可不在这里.向左滑动打开应用列表,在这里可以看到UC预装的一些应用,当然可以随用户自己删除增加. uc浏览器 第二步 找到"视频大全"的图标并打开,可以看到这个视频大全由"神马视频"提供,里面有丰富的视频资源可以观看,也可以在搜索栏里进行自定义搜索. uc浏览器 第三步 以"电影混剪"为例.打开它,便可以观看最新一集的视频,下面的列表

uc浏览器怎么下载视频?

  uc浏览器怎么下载视频? 第一步 打开UC浏览器,在首页我们可以看到UC为用户推荐的内容,当然我们要找的视频可不在这里.向左滑动打开应用列表,在这里可以看到UC预装的一些应用,当然可以随用户自己删除增加. 第二步 找到"视频大全"的图标并打开,可以看到这个视频大全由"神马视频"提供,里面有丰富的视频资源可以观看,也可以在搜索栏里进行自定义搜索. 第三步 以"电影混剪"为例.打开它,便可以观看最新一集的视频,下面的列表有往期的视频. 如何把想看

UC浏览器中如何设置迅雷为默认下载工具

  如何设置迅雷为默认下载工具?很多用户都不是很习惯浏览器自带的下载器,比如使用UC浏览器浏览网页下载软件,通常都是默认用自带的下载工具下载,可是在下载比较大的软件时十分方便,那么我们怎么设置迅雷为UC浏览器默认的下载工具呢?方法很简单. UC浏览器中如何设置迅雷为默认下载工具 步骤一:首先打开UC浏览器,点击浏览器左上角的头像,选择"设置"按钮; 步骤二:打开UC浏览器设置界面后,在窗口中选择"常规"; 步骤三:在"常规"界面的最下方,有个下载

手机UC浏览器表单密码怎么设置

  不少UC浏览器的用户都在问,UC浏览器表单密码怎么设置.这一点很重要,如在操作关于资金的帐户时,请慎用使用"自动保存表单密码"功能,防范支付功能被盗取.今天,小编就来跟大家分享UC浏览器表单密码设置方法. 手机UC浏览器表单密码设置方法 1.首先点击UC浏览器的菜单键,点击设置,再点击系统设置;(如下图所示) 2.在基本设置中往下拉,看到表单保存,点击下拦框,就可以选择你想要设置的类型;(如下图所示) 3.表单保存总有三种方案供选择,一是提示保存,二是自动保存,三是不保存.你可根据

UC浏览器怎么关闭消息推送

  UC浏览器怎么关闭消息推送?不少人使用UC浏览器是为了查看网页方便.而在使用过程中,不少人发现,它默认是有不少消息推送的,非常烦人,那要怎么关闭这些消息推送呢?项目,一起来看看小编为大家带来的UC浏览器关闭消息推送教程. 下面小编就来教大家UC浏览器如何关闭消息推送. 1.打开UC浏览器,点击中间下方的[三],然后点击左侧的[齿轮图标]进入设置.(如下图) 2.点击[消息设置],然后把里面的所有选项都关闭就OK了.(如下图)