返回键的拦截
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
if (event.getKeyCode() == KeyEvent.KEYCODE_BACK
&& event.getAction() == KeyEvent.ACTION_DOWN) { if (firstTime + 2000 > System.currentTimeMillis()) {
super.onBackPressed();
} else {
ToastUtils.showShort(this, "再按一次退出程序");
}
firstTime = System.currentTimeMillis(); return false;
}
return super.dispatchKeyEvent(event);
}
package com.xinhua.schome.activity; import android.app.TabActivity;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.FragmentTransaction;
import android.text.TextUtils;
import android.view.KeyEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RadioGroup;
import android.widget.TextView;
import android.widget.RadioGroup.OnCheckedChangeListener;
import android.widget.TabHost; import com.easemob.EMConnectionListener;
import com.easemob.EMError;
import com.easemob.EMEventListener;
import com.easemob.EMNotifierEvent;
import com.easemob.chat.EMChatManager;
import com.xinhua.schome.R;
import com.xinhua.schome.base.App;
import com.xinhua.schome.base.AppManager;
import com.xinhua.schome.common.MyConstants;
import com.xinhua.schome.event.BaseEvent;
import com.xinhua.schome.event.GetMsgEvent;
import com.xinhua.schome.event.LoginChangeCityEvent;
import com.xinhua.schome.event.MainEvent;
import com.xinhua.schome.event.UpdateCityEvent;
import com.xinhua.schome.utils.AppHelper;
import com.xinhua.schome.utils.PrefUtils;
import com.xinhua.schome.utils.ToastUtils;
import com.xinhua.schome.webactivity.FindWebActivity;
import com.xinhua.schome.webactivity.MainWebActivity;
import com.xinhua.schome.webactivity.UserCenterWebActivity;
import com.xinhua.schome.webactivity.MainWebActivity.MyConnectionListener; import de.greenrobot.event.EventBus; public class MainActivity extends TabActivity implements OnClickListener,EMEventListener { private static long firstTime; private TabHost tabHost; private ImageView mBelowHomeIv;
private ImageView mBelowMessageIv;
private ImageView mBelowFindIv;
private ImageView mBelowPersonageIv;
private TextView mBelowHomeTv;
private TextView mBelowMessageTv;
private TextView mBelowFindTv;
private TextView mBelowPersonageTv;
private FrameLayout mMainFrame;
private LinearLayout mHomeLayout;
private LinearLayout mMessageLayout;
private LinearLayout mFindLayout;
private LinearLayout mPersonageLayout; private String mobile;
private TextView mMessageNumTv; private MyConnectionListener connectionListener; @Override
protected void onNewIntent(Intent intent) {
// TODO Auto-generated method stub
System.out.println("onNewIntent");
super.onNewIntent(intent);
} @Override
public boolean dispatchKeyEvent(KeyEvent event) {
if (event.getKeyCode() == KeyEvent.KEYCODE_BACK
&& event.getAction() == KeyEvent.ACTION_DOWN) { if (firstTime + > System.currentTimeMillis()) {
super.onBackPressed();
} else {
ToastUtils.showShort(this, "再按一次退出程序");
}
firstTime = System.currentTimeMillis(); return false;
}
return super.dispatchKeyEvent(event);
} @Override
protected void onCreate(Bundle arg0) {
// TODO Auto-generated method stub
super.onCreate(arg0); setContentView(R.layout.activity_new_main); AppManager.getInstance().addActivity(this); tabHost = this.getTabHost();
tabHost.addTab(tabHost.newTabSpec("首页").setIndicator("首页")
.setContent(new Intent(this, MainWebActivity.class)));
tabHost.addTab(tabHost.newTabSpec("消息").setIndicator("消息")
.setContent(new Intent(this, MessageActivity.class)));
tabHost.addTab(tabHost.newTabSpec("发现").setIndicator("发现")
.setContent(new Intent(this, FindWebActivity.class)));
// tabHost.addTab(tabHost.newTabSpec("个人").setIndicator("个人").setContent(new
// Intent(this, UserCenterWebActivity.class))); tabHost.addTab(tabHost.newTabSpec("个人").setIndicator("个人")
.setContent(new Intent(this, MyProfileActivity.class))); initView(); changePage(); EventBus.getDefault().register(this); connectionListener = new MyConnectionListener();
EMChatManager.getInstance().addConnectionListener(connectionListener); } /**
* 连接监听listener
*
*/
public class MyConnectionListener implements EMConnectionListener { @Override
public void onConnected() { } @Override
public void onDisconnected(final int error) { final String st1 = getResources().getString(
R.string.can_not_connect_chat_server_connection);
final String st2 = getResources().getString(
R.string.the_current_network);
runOnUiThread(new Runnable() { @Override
public void run() {
if (error == EMError.USER_REMOVED) {
// 显示帐号已经被移除
// showAccountRemovedDialog();
} else if (error == EMError.CONNECTION_CONFLICT) {
// 显示帐号在其他设备登陆dialog
showConflictDialog();
} else {
/*
* chatHistoryFragment.errorItem.setVisibility(View.VISIBLE
* ); if (NetUtils.hasNetwork(MainWebActivity.this))
* chatHistoryFragment.errorText.setText(st1); else
* chatHistoryFragment.errorText.setText(st2);
*/ }
} });
}
} /**
* 显示帐号在别处登录dialog
*/
private void showConflictDialog() { // TODO Auto-generated method stub
ToastUtils.showShort(MainActivity.this, "此帐号已经在其他移动设备登录,请注意帐号安全"); AppManager.getInstance().finishAllActivityExcept(MainActivity.class); PrefUtils.putString(MainActivity.this, MyConstants.PREF_KEY_SID, "");
PrefUtils.putString(MainActivity.this,
MyConstants.PREF_KEY_USER_JSON, "");
PrefUtils.putInt(this, MyConstants.KEY_NO_VIEW_COUNT, ); Intent intent = new Intent(MainActivity.this, LoginActivity.class); if (App.getUser() != null) {
mobile = App.getUser().getMobile();
intent.putExtra("Mobile", mobile);
} startActivity(intent); App.setUser(null); EMChatManager.getInstance().logout(); } private void initView() { mBelowHomeIv = (ImageView) findViewById(R.id.below_home_iv);
mBelowMessageIv = (ImageView) findViewById(R.id.below_message_iv);
mBelowFindIv = (ImageView) findViewById(R.id.below_find_iv);
mBelowPersonageIv = (ImageView) findViewById(R.id.below_personage_iv); mBelowHomeTv = (TextView) findViewById(R.id.below_home_tv);
mBelowMessageTv = (TextView) findViewById(R.id.below_message_tv);
mBelowFindTv = (TextView) findViewById(R.id.below_find_tv);
mBelowPersonageTv = (TextView) findViewById(R.id.below_personage_tv); mMainFrame = (FrameLayout) findViewById(R.id.main_frame); mHomeLayout = (LinearLayout) findViewById(R.id.below_home_layout);
mMessageLayout = (LinearLayout) findViewById(R.id.below_message_layout);
mFindLayout = (LinearLayout) findViewById(R.id.below_find_layout);
mPersonageLayout = (LinearLayout) findViewById(R.id.below_personage_layout);
mMessageNumTv = (TextView) findViewById(R.id.message_num_tv);
mHomeLayout.setOnClickListener(this);
mMessageLayout.setOnClickListener(this);
mFindLayout.setOnClickListener(this);
mPersonageLayout.setOnClickListener(this); } public void onEventMainThread(MainEvent event) { switch (event.what) {
case : PrefUtils.putString(this, "find_web_index", "");
changePage(); break;
case : PrefUtils.putString(this, "find_web_index", "");
changePage();
break; default:
break;
} } public void onEvent(BaseEvent event) {
if (event instanceof GetMsgEvent) {
updateBadgeView();
} } @Override
protected void onDestroy() {
// TODO Auto-generated method stub
EventBus.getDefault().unregister(this);
AppManager.getInstance().finishActivity(this);
super.onDestroy();
} /**
* 连续按两次返回键就退出
*/
@Override
public void onBackPressed() { } @Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()) {
case R.id.below_home_layout:
changePage();
break;
case R.id.below_message_layout:
changePage(); break; case R.id.below_find_layout:
changePage(); break; case R.id.below_personage_layout:
changePage(); break; default:
break;
}
} private void clearSelection() {
// TODO Auto-generated method stub
mBelowHomeIv.setSelected(false);
mBelowMessageIv.setSelected(false);
mBelowFindIv.setSelected(false);
mBelowPersonageIv.setSelected(false); mBelowHomeTv.setSelected(false);
mBelowMessageTv.setSelected(false);
mBelowFindTv.setSelected(false);
mBelowPersonageTv.setSelected(false);
} private void updateBadgeView() { if (App.getUser() == null) { mMessageNumTv.setVisibility(View.GONE); }else{ int unReadMsgCount = EMChatManager.getInstance().getUnreadMsgsCount(); int noViewCount = PrefUtils.getInt(getApplicationContext(),
MyConstants.KEY_NO_VIEW_COUNT, ); final int mTotalMsg = unReadMsgCount + noViewCount; runOnUiThread(new Runnable() { @Override
public void run() {
// TODO Auto-generated method stub
if (mTotalMsg > ) { if (mTotalMsg > ) {
mMessageNumTv.setText("");
mMessageNumTv.setVisibility(View.VISIBLE);
}else{
mMessageNumTv.setText(mTotalMsg + "");
mMessageNumTv.setVisibility(View.VISIBLE);
} } else {
mMessageNumTv.setVisibility(View.GONE);
}
}
}); } } private void changePage(int i) { clearSelection(); switch (i) {
case :
mBelowHomeIv.setSelected(true);
mBelowHomeTv.setSelected(true); tabHost.setCurrentTabByTag("首页"); break;
case :
mBelowMessageIv.setSelected(true);
mBelowMessageTv.setSelected(true);
AppManager.getInstance().change_message_fragment = true; tabHost.setCurrentTabByTag("消息"); // PrefUtils.putBoolean(getApplicationContext(), MyConstants.KEY_CHANGE_MESSAGE_FRAGMENT, true); break;
case :
mBelowFindIv.setSelected(true);
mBelowFindTv.setSelected(true);
tabHost.setCurrentTabByTag("发现"); break;
case :
mBelowPersonageIv.setSelected(true);
mBelowPersonageTv.setSelected(true);
tabHost.setCurrentTabByTag("个人"); break; default:
break;
}
} @Override
protected void onResume() {
// TODO Auto-generated method stub
System.out.println("Main------onResume");
updateBadgeView(); EMChatManager.getInstance().registerEventListener(
this,
new EMNotifierEvent.Event[] {
EMNotifierEvent.Event.EventNewMessage,
EMNotifierEvent.Event.EventOfflineMessage,
EMNotifierEvent.Event.EventConversationListChanged }); super.onResume();
} @Override
protected void onStop() {
// TODO Auto-generated method stub
super.onStop();
EMChatManager.getInstance().unregisterEventListener(this);
} @Override
public void onEvent(EMNotifierEvent arg0) {
// TODO Auto-generated method stub
updateBadgeView();
} }
<?xml version="1.0" encoding="utf-8"?>
<TabHost xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/tabhost"
android:layout_width="fill_parent"
android:layout_height="fill_parent" > <LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/white"
android:orientation="vertical" > <FrameLayout
android:id="@android:id/tabcontent"
android:layout_width="fill_parent"
android:layout_height="0.0dip"
android:layout_weight="1.0" /> <TabWidget
android:id="@android:id/tabs"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="0.0"
android:visibility="gone" /> <include layout="@layout/include_divider" /> <LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:paddingBottom="3dp"
android:paddingTop="3dp" > <LinearLayout
android:id="@+id/below_home_layout"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight=""
android:gravity="center"
android:orientation="vertical" > <ImageView
android:id="@+id/below_home_iv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/bg_below_home_selector" /> <TextView
android:id="@+id/below_home_tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="首页"
android:textColor="@drawable/find_teach_tv_color_selector" />
</LinearLayout> <RelativeLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="" > <LinearLayout
android:id="@+id/below_message_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="vertical" > <RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content" > <ImageView
android:id="@+id/below_message_iv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:src="@drawable/bg_below_message_selector" /> <TextView
android:id="@+id/message_num_tv"
android:layout_width="15dp"
android:layout_height="15dp"
android:background="@drawable/shape_circle_red_bord"
android:gravity="center"
android:text=""
android:layout_toRightOf="@id/below_message_iv"
android:textColor="@color/white"
android:visibility="invisible"
android:textSize="8sp" /> </RelativeLayout> <TextView
android:id="@+id/below_message_tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="消息"
android:textColor="@drawable/find_teach_tv_color_selector" />
</LinearLayout>
</RelativeLayout> <LinearLayout
android:id="@+id/below_find_layout"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight=""
android:gravity="center"
android:orientation="vertical" > <ImageView
android:id="@+id/below_find_iv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/bg_below_find_selector" /> <TextView
android:id="@+id/below_find_tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="发现"
android:textColor="@drawable/find_teach_tv_color_selector" />
</LinearLayout> <LinearLayout
android:id="@+id/below_personage_layout"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight=""
android:gravity="center"
android:orientation="vertical" > <ImageView
android:id="@+id/below_personage_iv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/bg_below_personage_selector" /> <TextView
android:id="@+id/below_personage_tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="个人"
android:textColor="@drawable/find_teach_tv_color_selector" />
</LinearLayout>
</LinearLayout>
</LinearLayout> </TabHost>