Android ListView滑动混乱解决方法
2011-08-18 17:25
260 查看
在写Adapter 时,比如可以取到数据,就显示出来。如果取不到数据不显示。但是滑动list,此时无数据的会显示有数据。解决办法就是用boolean判断,有为true,显示,没有为false,这样根据这个boolean值做显示,或是不显示,这样就可以解决了。
自己做项目的源代码供大家看看,各种技巧大家可以参考下。
package com.company.myname; //修改了这个,呵呵
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import android.app.Dialog;
import android.app.ListActivity;
import android.app.ProgressDialog;
import android.content.ActivityNotFoundException;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.os.Handler.Callback;
import android.telephony.TelephonyManager;
import android.text.TextUtils;
import android.util.Log;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.AdapterContextMenuInfo;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
public class AllChannelTabActivity extends ListActivity {
private static final String TAG = "AllChannelTabActivity";
public static InnoCmmbService mInnoCmmbService = null;
public static InnoMbbmsOperate mInnoMbbmsOperate = null;
public static ArrayList<MBBMSService> mMbbmsChannelList;
public static ArrayList<ServiceInfo> mCmmbChannelList;
private ArrayList<MBBMSContent> mMbbmsContentList;
private ArrayList<ScheduleInfo> mScheduleList;
public CmmbChannelAdapter mCmmbAdapter = null;
public MbbmsChannelAdapter mMbbmsAdapter = null;
private Preference_T mPreference_T;
private Context mContext;
private Handler mHandler;
ProgressDialog mDialog;
private TelephonyManager mTel;
private boolean simIn = false;
private boolean Inited = false;
private static final int MENU_CONTENT = 0;
private int mFavoriteFlag = -1;
private String mCurrentTime;
private String today;
public class MbbmsListener implements InnoMbbmsOperate.onMbbmsListener {
public void onMbbmsCallBack(ServiceEvent_T event, Object cookie)
{
}
}
public class HandlerListener implements Callback {
public boolean handleMessage(Message msg) {
// TODO Auto-generated method stub
return AllChannelTabActivity.this.handleMessage(msg);
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.all_channel_list);
Log.i(TAG,"onCreate ......");
mContext = getApplicationContext();
mTel = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
if (mTel.getSimState() == 5) {
simIn = true;
}
//get current time
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
mCurrentTime = sdf.format(date);
Log.i(TAG,"current time is "+mCurrentTime);
//get date
Calendar cal = Calendar.getInstance();
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
today = formatter.format(cal.getTime());
Log.i(TAG,"today is "+today);
if (!simIn) {
mCmmbChannelList = new ArrayList<ServiceInfo>();
mScheduleList = new ArrayList<ScheduleInfo> ();
mCmmbAdapter = new CmmbChannelAdapter(mContext,mCmmbChannelList);
setListAdapter(mCmmbAdapter);
} else {
mMbbmsChannelList = new ArrayList<MBBMSService>();
mMbbmsAdapter = new MbbmsChannelAdapter(mContext,mMbbmsChannelList);
setListAdapter(mMbbmsAdapter);
}
mHandler = new Handler(new HandlerListener());
Log.i(TAG,"oncreat handler inited ..............................");
mInnoCmmbService = new InnoCmmbService(this);
mInnoMbbmsOperate = new InnoMbbmsOperate(this);
InnoCmmbService.INNO_Init("/data/data/com.innofidei.cmmb","/data/data/com.innofidei.cmmb",1);
Log.i(TAG,"cmmb set init path ...........");
InnoCmmbService.INNO_SetLogLevel(InnoCmmbService.LOG_ALL);
Log.i(TAG,"InnoCmmbService has inited.........");
if (!simIn) {
InitCmmbChannel();
} else {
InitMbbmsChannel();
}
getListView().smoothScrollToPosition(4);
getListView().setOnCreateContextMenuListener(this);
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
Log.i(TAG,"onResume................");
//refresh when cancel favarite channel in set
if (simIn) {
if (mMbbmsChannelList.size() > 0)
mMbbmsAdapter.notifyDataSetChanged();
} else {
if (mCmmbChannelList.size() > 0)
mCmmbAdapter.notifyDataSetChanged();
}
}
protected void onDestroy() {
super.onDestroy();
InnoCmmbService.INNO_Deinit();
}
public void InitMbbmsChannel() {
Log.i(TAG,"InitMbbmsChannel carry out......");
mDialog = ProgressDialog.show(this, "MBBMS", getString(R.string.init_sg), true);
mPreference_T = new Preference_T();
mMbbmsContentList = new ArrayList<MBBMSContent>();
mInnoMbbmsOperate.mStatus = InnoMbbmsOperate.STATUS_START;
mInnoMbbmsOperate.INNO_MBBMS_Start(null, mPreference_T);
Log.i(TAG," mInnoMbbmsOperate.INNO_MBBMS_Start(null, mPreference_T) carry out");
MBBMSContent [] a = mInnoMbbmsOperate.GetContent(null);
Log.i(TAG,"a length is "+a.length);
for (int i=0;i<a.length;i++) {
if (a[i].m_StartTime.contains(today)
&& a[i].m_StartTime.compareToIgnoreCase(mCurrentTime) <= 0
&& a[i].m_EndTime.compareToIgnoreCase(mCurrentTime) > 0) {
mMbbmsContentList.add(a[i]);
Log.i(TAG,"###mbbms content is "+a[i].m_Name+" ; ref id is "+a[0].m_ServiceReferenceidRef);
}
}
Log.i(TAG,"mMbbmsContentList length is "+mMbbmsContentList.size());
}
public void InitCmmbChannel() {
Log.i(TAG,"init cmmb channel..........");
InnoCmmbService.INNO_ScanChannel(13, 48);
mDialog = ProgressDialog.show(this, "CMMB", getString(R.string.scan_channel));
}
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
// TODO Auto-generated method stub
super.onListItemClick(l, v, position, id);
boolean cmmbWatch = false;
boolean mbbmsWatch = false;
if (!simIn)
{
Log.i(TAG,"play cmmb program...............");
ServiceInfo service = mCmmbChannelList.get(position);
if (!service.mForFree) {
Toast.makeText(this,getString(R.string.can_not_watch) , Toast.LENGTH_SHORT).show();
} else {
cmmbWatch = true;
mInnoCmmbService.INNO_PlayChannel(service.mFreqNo, service.mId);
}
} else {
Log.i(TAG,"play mbbms program..............");
MBBMSService service = mMbbmsChannelList.get(position);
if (service.m_isSubscribed || service.m_forfree) {
mbbmsWatch = true;
if (mInnoMbbmsOperate.mAuthorize == InnoMbbmsOperate.STATUS_AUTHORIZE_OK
|| mInnoMbbmsOperate.mAuthorize == InnoMbbmsOperate.STATUS_AUTHORIZE_ING) {
mInnoMbbmsOperate.INNO_MBBMS_PlayTV(service.m_id, MbbmsOperate.REQ_MSK_NONE);
} else {
mInnoMbbmsOperate.mAuthorize = InnoMbbmsOperate.STATUS_AUTHORIZE_ING;
mInnoMbbmsOperate.INNO_MBBMS_PlayTV(service.m_id, MbbmsOperate.REQ_MSK_ALL_SERVICE);
}
} else {
//request modify to subscribe channel
Toast.makeText(this,getString(R.string.do_not_watch), Toast.LENGTH_SHORT).show();
}
}
if (cmmbWatch || mbbmsWatch) {
Intent intent = new Intent();
intent.setClass(this, VideoViewActivity.class);
try {
startActivity(intent);
} catch (ActivityNotFoundException ae) {
Log.v(TAG, "Activity not found");
ae.printStackTrace();
} catch (Exception e) {
Log.v(TAG, "Exception found");
e.printStackTrace();
}
}
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
// TODO Auto-generated method stub
super.onCreateContextMenu(menu, v, menuInfo);
AdapterView.AdapterContextMenuInfo info = (AdapterContextMenuInfo) menuInfo;
mFavoriteFlag = info.position;
Log.i(TAG,"create context menu position is "+mFavoriteFlag);
menu.add(0, MENU_CONTENT, 0, R.string.favo_unfavo);
}
@Override
public boolean onContextItemSelected(MenuItem item) {
// TODO Auto-generated method stub
switch (item.getItemId()) {
case MENU_CONTENT:
if (!simIn) {
String [] mChannelName = new String [5];
SharedPreferences sharedPreferences=getSharedPreferences("favoriteinfo",Context.MODE_PRIVATE);
for (int i=0;i<5;i++) {
mChannelName[i] = sharedPreferences.getString("channel"+i,"");
Log.i(TAG,"channel name "+i+" is "+mChannelName[i]);
}
String mRecordName = mCmmbChannelList.get(mFavoriteFlag).mName;
boolean findFlag = false;
for (int i=0;i<5;i++) {
if (!TextUtils.isEmpty(mChannelName[i])) {
if (mRecordName.equals(mChannelName[i])) {
Editor edit = sharedPreferences.edit();
edit.putString("channel"+i, "");
edit.commit();
findFlag = true;
Toast.makeText(this,mChannelName[i]+getString(R.string.unfavorite_success),Toast.LENGTH_SHORT).show();
break;
}
}
}
if (!findFlag) {
for (int i=0;i<5;i++) {
if (TextUtils.isEmpty(mChannelName[i])) {
Editor edit = sharedPreferences.edit();
edit.putString("channel"+i, mRecordName);
edit.commit();
Toast.makeText(this,mRecordName+getString(R.string.favorite_success),Toast.LENGTH_SHORT).show();
break;
}
}
}
mCmmbAdapter.notifyDataSetChanged();
} else {
String [] mChannelName = new String [5];
SharedPreferences sharedPreferences=getSharedPreferences("mbbmsfavoriteinfo",Context.MODE_PRIVATE);
for (int i=0;i<5;i++) {
mChannelName[i] = sharedPreferences.getString("channel"+i,"");
}
String mRecordName = mMbbmsChannelList.get(mFavoriteFlag).m_Name;
boolean findFlag = false;
//already exist,remove it
for (int i=0;i<5;i++) {
if (!TextUtils.isEmpty(mChannelName[i])) {
if (mRecordName.equals(mChannelName[i])) {
Editor edit = sharedPreferences.edit();
edit.putString("channel"+i, "");
edit.commit();
findFlag = true;
Toast.makeText(this,mChannelName[i]+getString(R.string.unfavorite_success),Toast.LENGTH_SHORT).show();
break;
}
}
}
//not exist,add it
if (!findFlag) {
for (int i=0;i<5;i++) {
if (TextUtils.isEmpty(mChannelName[i])) {
Editor edit = sharedPreferences.edit();
edit.putString("channel"+i, mRecordName);
edit.commit();
Toast.makeText(this,mRecordName+getString(R.string.favorite_success),Toast.LENGTH_SHORT).show();
break;
}
}
}
mMbbmsAdapter.notifyDataSetChanged();
}
break;
}
return super.onContextItemSelected(item);
}
private class MbbmsChannelAdapter extends ArrayAdapter<MBBMSService> {
public MbbmsChannelAdapter(Context context, ArrayList<MBBMSService> mList) {
super(context, 0, mList);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
MBBMSService info = mMbbmsChannelList.get(position);
Log.i(TAG,"---------------MbbmsAdapter channnel is "+info.m_Name);
Log.i(TAG," position is "+position);
boolean findFlag = false;
if (convertView == null) {
final LayoutInflater inflater = getLayoutInflater();
convertView = inflater.inflate(R.layout.text_view, parent, false);
}
ImageView mLock = (ImageView) convertView.findViewById(R.id.lock_channel);
if (info.m_isSubscribed == true || info.m_forfree){
mLock.setImageResource(R.drawable.unlock);
} else {
mLock.setImageResource(R.drawable.lock);
}
TextView aChannel = (TextView) convertView.findViewById(R.id.one_channel);
aChannel.setText((CharSequence)info.m_Name);
TextView time = (TextView) convertView.findViewById(R.id.time_item);
TextView describe = (TextView) convertView.findViewById(R.id.describe_item);
for (int i=0;i<mMbbmsContentList.size();i++) {
if (info.m_id.equalsIgnoreCase(mMbbmsContentList.get(i).m_ServiceReferenceidRef)){
findFlag = true;
String [] start = mMbbmsContentList.get(i).m_StartTime.split(" ");
String [] end = mMbbmsContentList.get(i).m_EndTime.split(" ");
time.setText(start[1]+" "+end[1]);
describe.setText(" "+mMbbmsContentList.get(i).m_Name);
Log.i(TAG,"****************convertview position is "+position+":"+info.m_Name+" :"+mMbbmsContentList.get(i).m_Name);
break;
}
}
if (!findFlag) {
time.setText("");
describe.setText("");
}
ImageView mFavoView = (ImageView) convertView.findViewById(R.id.favo_channel);
mFavoView.setImageResource(R.drawable.collection);
mFavoView.setVisibility(View.GONE);
String [] mChannelName = new String [5];
SharedPreferences sharedPreferences=getSharedPreferences("mbbmsfavoriteinfo",Context.MODE_PRIVATE);
String channelName0 = sharedPreferences.getString("channel0","");
for (int i=0;i<5;i++) {
mChannelName[i] = sharedPreferences.getString("channel"+i,"");
}
for (int i=0;i<5;i++) {
if (info.m_Name.equals(mChannelName[i])) {
mFavoView.setVisibility(View.VISIBLE);
break;
}
}
return convertView;
}
}
private class CmmbChannelAdapter extends ArrayAdapter<ServiceInfo> {
public CmmbChannelAdapter(Context context, ArrayList<ServiceInfo> mList) {
super(context, 0, mList);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
boolean findFlag = false;
final ServiceInfo info = mCmmbChannelList.get(position);
if (convertView == null) {
final LayoutInflater inflater = getLayoutInflater();
convertView = inflater.inflate(R.layout.text_view, parent, false);
}
ImageView mLockView = (ImageView) convertView.findViewById(R.id.lock_channel);
if (info.mForFree == false) {
mLockView.setImageResource(R.drawable.lock);
} else {
mLockView.setImageResource(R.drawable.unlock);
}
TextView mChannel = (TextView) convertView.findViewById(R.id.one_channel);
mChannel.setText(info.mFreqNo+" "+info.mName);
TextView time = (TextView) convertView.findViewById(R.id.time_item);
TextView describe = (TextView) convertView.findViewById(R.id.describe_item);
for (int i=0;i<mScheduleList.size();i++) {
if (info.mId == mScheduleList.get(i).mServiceId){
findFlag = true;
String [] start = mScheduleList.get(i).mBeginTime.split(" ");
String [] end = mScheduleList.get(i).mEndTime.split(" ");
time.setText(start[1]+" "+end[1]);
describe.setText(" "+mScheduleList.get(i).mTitleStr);
Log.i(TAG,"****************convertview position is "+position+":"+info.mName+" :"+mScheduleList.get(i).mTitleStr);
break;
}
}
if (!findFlag) {
time.setText("");
describe.setText("");
}
ImageView mFavoView = (ImageView) convertView.findViewById(R.id.favo_channel);
mFavoView.setImageResource(R.drawable.collection);
mFavoView.setVisibility(View.GONE);
String [] mChannelName = new String [5];
SharedPreferences sharedPreferences=getSharedPreferences("favoriteinfo",Context.MODE_PRIVATE);
String channelName0 = sharedPreferences.getString("channel0","");
for (int i=0;i<5;i++) {
mChannelName[i] = sharedPreferences.getString("channel"+i,"");
}
for (int i=0;i<5;i++) {
if (info.mName.equals(mChannelName[i])) {
mFavoView.setVisibility(View.VISIBLE);
break;
}
}
return convertView;
}
}
public void bindChannelList() {
if (simIn) {
Log.i(TAG,"bind mbbms ChannelList carry out");
mMbbmsAdapter.notifyDataSetChanged();
} else {
Log.i(TAG,"bind cmmb ChannelList carry out");
mCmmbAdapter.notifyDataSetChanged();
}
}
public Handler getMyHandler() {
return mHandler;
}
public boolean handleMessage(Message msg) {
Log.i(TAG, "msg.what = " + msg.what);
if (msg.what == InnoMbbmsOperate.SERVICE_UPDATESG_COMPLETED)
{
if (mInnoMbbmsOperate.mStatus == InnoMbbmsOperate.STATUS_START)
{
mDialog.dismiss();
}
if (msg.arg1 == 0)
{
Toast.makeText(this, getString(R.string.init_sg_sucess), Toast.LENGTH_SHORT).show();
mDialog = ProgressDialog.show(this, "MBBMS", getString(R.string.init_st), true);
}
else
{
Toast.makeText(this, getString(R.string.init_sg_fail), Toast.LENGTH_SHORT).show();
}
}
else if (msg.what == InnoMbbmsOperate.SERVICE_UPDATEST_COMPLETED)
{
if (mInnoMbbmsOperate.mStatus == InnoMbbmsOperate.STATUS_START)
{
mDialog.dismiss();
}
if (msg.arg1 == 128 || msg.arg1 == 129 || msg.arg1 == 130)
{
Toast.makeText(this, getString(R.string.init_st_success), Toast.LENGTH_SHORT).show();
if (!Inited)
{
Inited = true;
mDialog = ProgressDialog.show(this, "MBBMS", getString(R.string.init_gba), true);
}
mMbbmsChannelList.clear();
if (mInnoMbbmsOperate.m_MbbmsServiceArray != null) {
Log.i(TAG, "rService length = " + mInnoMbbmsOperate.m_MbbmsServiceArray.length);
for (int i = 0; i < mInnoMbbmsOperate.m_MbbmsServiceArray.length; i++) {
Log.i(TAG, "add service id = " + mInnoMbbmsOperate.m_MbbmsServiceArray[i].m_id + "; name = "
+ mInnoMbbmsOperate.m_MbbmsServiceArray[i].m_Name + "; subscribed=" + mInnoMbbmsOperate.m_MbbmsServiceArray[i].m_isSubscribed);
mMbbmsChannelList.add(mInnoMbbmsOperate.m_MbbmsServiceArray[i]);
}
}
bindChannelList();
}
else
{
Toast.makeText(this, getString(R.string.init_st_fail), Toast.LENGTH_SHORT).show();
}
}
else if (msg.what == InnoMbbmsOperate.SERVICE_INITIALIZE_COMPLETED)
{
if (mInnoMbbmsOperate.mStatus == InnoMbbmsOperate.STATUS_START)
{
mDialog.dismiss();
mInnoMbbmsOperate.mStatus = InnoMbbmsOperate.STATUS_IDLE;
}
if (msg.arg1 == 0)
{
Toast.makeText(this, getString(R.string.gba_ok), Toast.LENGTH_SHORT).show();
}
else
{
Toast.makeText(this, getString(R.string.gba_fail), Toast.LENGTH_SHORT).show();
}
}
else if (msg.what == InnoCmmbService.SOURCE_SERVICE) {
if (mDialog.isShowing()) {
mDialog.dismiss();
}
ServiceInfo[] rService = InnoCmmbService
.INNO_GetAllCMMBServiceInfo(0);
if (rService != null) {
Log.i(TAG, "################# mService length = " + rService.length);
for (int i = 0; i < rService.length; i++) {
//filter the channel which name is number
if (rService[i].mName.startsWith("1")) {
continue;
} else if (rService[i].mName.startsWith("2")) {
continue;
} else if (rService[i].mName.startsWith("3")) {
continue;
} else if (rService[i].mName.startsWith("4")) {
continue;
}
boolean bExist = false;
for (int j = 0; j < mCmmbChannelList.size(); j++) {
ServiceInfo service = mCmmbChannelList.get(j);
if (service.mId == rService[i].mId
&& service.mFreqNo == rService[i].mFreqNo) {
bExist = true;
break;
}
}
if (!bExist) {
mCmmbChannelList.add(rService[i]);
}
}
} else {
Log.i(TAG,"can not get ServiceInfo ..........");
}
//add
ScheduleInfo[] a = InnoCmmbService.INNO_GetAllCMMBScheduleInfo(0, 0);
if (a!=null) {
for (int i=0;i<a.length;i++) {
if (a[i].mBeginTime.contains(today)
&& a[i].mBeginTime.compareToIgnoreCase(mCurrentTime) <= 0
&& a[i].mDescription.compareToIgnoreCase(mCurrentTime) > 0) {
mScheduleList.add(i, a[i]);
}
}
Log.i(TAG, "schedule number is "+a.length);
} else {
Log.i(TAG, "can not get schedule info");
}
bindChannelList();
}
else if (msg.what == InnoMbbmsOperate.SOURCE_INQUIRY)
{
if (mInnoMbbmsOperate.m_MbbmsSubscribePurchaseItems != null)
{
Log.i(TAG, "m_MbbmsSubscribePurchaseItems length=" + mInnoMbbmsOperate.m_MbbmsSubscribePurchaseItems.length);
for (int i=0; i<mInnoMbbmsOperate.m_MbbmsSubscribePurchaseItems.length; i++)
{
Log.i(TAG, "Unsubscribe id=" + mInnoMbbmsOperate.m_MbbmsSubscribePurchaseItems[i].m_globalPurchaseItemID
+ " name=" + mInnoMbbmsOperate.m_MbbmsSubscribePurchaseItems[i].m_Name);
if (mInnoMbbmsOperate.m_MbbmsSubscribePurchaseItems[i].m_service != null)
{
for (int j=0; j<mInnoMbbmsOperate.m_MbbmsSubscribePurchaseItems[i].m_service.length; j++)
{
Log.i(TAG, "service id=" + mInnoMbbmsOperate.m_MbbmsSubscribePurchaseItems[i].m_service[j].m_id
+ " name=" + mInnoMbbmsOperate.m_MbbmsSubscribePurchaseItems[i].m_service[j].m_Name);
}
}
}
String[] purchaseID = new String[1];
purchaseID[0] = mInnoMbbmsOperate.m_MbbmsSubscribePurchaseItems[0].m_globalPurchaseItemID;
mInnoMbbmsOperate.Unsubscribe(purchaseID, 1);
}
}
return true;
}
}
自己做项目的源代码供大家看看,各种技巧大家可以参考下。
package com.company.myname; //修改了这个,呵呵
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import android.app.Dialog;
import android.app.ListActivity;
import android.app.ProgressDialog;
import android.content.ActivityNotFoundException;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.os.Handler.Callback;
import android.telephony.TelephonyManager;
import android.text.TextUtils;
import android.util.Log;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.AdapterContextMenuInfo;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
public class AllChannelTabActivity extends ListActivity {
private static final String TAG = "AllChannelTabActivity";
public static InnoCmmbService mInnoCmmbService = null;
public static InnoMbbmsOperate mInnoMbbmsOperate = null;
public static ArrayList<MBBMSService> mMbbmsChannelList;
public static ArrayList<ServiceInfo> mCmmbChannelList;
private ArrayList<MBBMSContent> mMbbmsContentList;
private ArrayList<ScheduleInfo> mScheduleList;
public CmmbChannelAdapter mCmmbAdapter = null;
public MbbmsChannelAdapter mMbbmsAdapter = null;
private Preference_T mPreference_T;
private Context mContext;
private Handler mHandler;
ProgressDialog mDialog;
private TelephonyManager mTel;
private boolean simIn = false;
private boolean Inited = false;
private static final int MENU_CONTENT = 0;
private int mFavoriteFlag = -1;
private String mCurrentTime;
private String today;
public class MbbmsListener implements InnoMbbmsOperate.onMbbmsListener {
public void onMbbmsCallBack(ServiceEvent_T event, Object cookie)
{
}
}
public class HandlerListener implements Callback {
public boolean handleMessage(Message msg) {
// TODO Auto-generated method stub
return AllChannelTabActivity.this.handleMessage(msg);
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.all_channel_list);
Log.i(TAG,"onCreate ......");
mContext = getApplicationContext();
mTel = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
if (mTel.getSimState() == 5) {
simIn = true;
}
//get current time
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
mCurrentTime = sdf.format(date);
Log.i(TAG,"current time is "+mCurrentTime);
//get date
Calendar cal = Calendar.getInstance();
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
today = formatter.format(cal.getTime());
Log.i(TAG,"today is "+today);
if (!simIn) {
mCmmbChannelList = new ArrayList<ServiceInfo>();
mScheduleList = new ArrayList<ScheduleInfo> ();
mCmmbAdapter = new CmmbChannelAdapter(mContext,mCmmbChannelList);
setListAdapter(mCmmbAdapter);
} else {
mMbbmsChannelList = new ArrayList<MBBMSService>();
mMbbmsAdapter = new MbbmsChannelAdapter(mContext,mMbbmsChannelList);
setListAdapter(mMbbmsAdapter);
}
mHandler = new Handler(new HandlerListener());
Log.i(TAG,"oncreat handler inited ..............................");
mInnoCmmbService = new InnoCmmbService(this);
mInnoMbbmsOperate = new InnoMbbmsOperate(this);
InnoCmmbService.INNO_Init("/data/data/com.innofidei.cmmb","/data/data/com.innofidei.cmmb",1);
Log.i(TAG,"cmmb set init path ...........");
InnoCmmbService.INNO_SetLogLevel(InnoCmmbService.LOG_ALL);
Log.i(TAG,"InnoCmmbService has inited.........");
if (!simIn) {
InitCmmbChannel();
} else {
InitMbbmsChannel();
}
getListView().smoothScrollToPosition(4);
getListView().setOnCreateContextMenuListener(this);
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
Log.i(TAG,"onResume................");
//refresh when cancel favarite channel in set
if (simIn) {
if (mMbbmsChannelList.size() > 0)
mMbbmsAdapter.notifyDataSetChanged();
} else {
if (mCmmbChannelList.size() > 0)
mCmmbAdapter.notifyDataSetChanged();
}
}
protected void onDestroy() {
super.onDestroy();
InnoCmmbService.INNO_Deinit();
}
public void InitMbbmsChannel() {
Log.i(TAG,"InitMbbmsChannel carry out......");
mDialog = ProgressDialog.show(this, "MBBMS", getString(R.string.init_sg), true);
mPreference_T = new Preference_T();
mMbbmsContentList = new ArrayList<MBBMSContent>();
mInnoMbbmsOperate.mStatus = InnoMbbmsOperate.STATUS_START;
mInnoMbbmsOperate.INNO_MBBMS_Start(null, mPreference_T);
Log.i(TAG," mInnoMbbmsOperate.INNO_MBBMS_Start(null, mPreference_T) carry out");
MBBMSContent [] a = mInnoMbbmsOperate.GetContent(null);
Log.i(TAG,"a length is "+a.length);
for (int i=0;i<a.length;i++) {
if (a[i].m_StartTime.contains(today)
&& a[i].m_StartTime.compareToIgnoreCase(mCurrentTime) <= 0
&& a[i].m_EndTime.compareToIgnoreCase(mCurrentTime) > 0) {
mMbbmsContentList.add(a[i]);
Log.i(TAG,"###mbbms content is "+a[i].m_Name+" ; ref id is "+a[0].m_ServiceReferenceidRef);
}
}
Log.i(TAG,"mMbbmsContentList length is "+mMbbmsContentList.size());
}
public void InitCmmbChannel() {
Log.i(TAG,"init cmmb channel..........");
InnoCmmbService.INNO_ScanChannel(13, 48);
mDialog = ProgressDialog.show(this, "CMMB", getString(R.string.scan_channel));
}
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
// TODO Auto-generated method stub
super.onListItemClick(l, v, position, id);
boolean cmmbWatch = false;
boolean mbbmsWatch = false;
if (!simIn)
{
Log.i(TAG,"play cmmb program...............");
ServiceInfo service = mCmmbChannelList.get(position);
if (!service.mForFree) {
Toast.makeText(this,getString(R.string.can_not_watch) , Toast.LENGTH_SHORT).show();
} else {
cmmbWatch = true;
mInnoCmmbService.INNO_PlayChannel(service.mFreqNo, service.mId);
}
} else {
Log.i(TAG,"play mbbms program..............");
MBBMSService service = mMbbmsChannelList.get(position);
if (service.m_isSubscribed || service.m_forfree) {
mbbmsWatch = true;
if (mInnoMbbmsOperate.mAuthorize == InnoMbbmsOperate.STATUS_AUTHORIZE_OK
|| mInnoMbbmsOperate.mAuthorize == InnoMbbmsOperate.STATUS_AUTHORIZE_ING) {
mInnoMbbmsOperate.INNO_MBBMS_PlayTV(service.m_id, MbbmsOperate.REQ_MSK_NONE);
} else {
mInnoMbbmsOperate.mAuthorize = InnoMbbmsOperate.STATUS_AUTHORIZE_ING;
mInnoMbbmsOperate.INNO_MBBMS_PlayTV(service.m_id, MbbmsOperate.REQ_MSK_ALL_SERVICE);
}
} else {
//request modify to subscribe channel
Toast.makeText(this,getString(R.string.do_not_watch), Toast.LENGTH_SHORT).show();
}
}
if (cmmbWatch || mbbmsWatch) {
Intent intent = new Intent();
intent.setClass(this, VideoViewActivity.class);
try {
startActivity(intent);
} catch (ActivityNotFoundException ae) {
Log.v(TAG, "Activity not found");
ae.printStackTrace();
} catch (Exception e) {
Log.v(TAG, "Exception found");
e.printStackTrace();
}
}
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
// TODO Auto-generated method stub
super.onCreateContextMenu(menu, v, menuInfo);
AdapterView.AdapterContextMenuInfo info = (AdapterContextMenuInfo) menuInfo;
mFavoriteFlag = info.position;
Log.i(TAG,"create context menu position is "+mFavoriteFlag);
menu.add(0, MENU_CONTENT, 0, R.string.favo_unfavo);
}
@Override
public boolean onContextItemSelected(MenuItem item) {
// TODO Auto-generated method stub
switch (item.getItemId()) {
case MENU_CONTENT:
if (!simIn) {
String [] mChannelName = new String [5];
SharedPreferences sharedPreferences=getSharedPreferences("favoriteinfo",Context.MODE_PRIVATE);
for (int i=0;i<5;i++) {
mChannelName[i] = sharedPreferences.getString("channel"+i,"");
Log.i(TAG,"channel name "+i+" is "+mChannelName[i]);
}
String mRecordName = mCmmbChannelList.get(mFavoriteFlag).mName;
boolean findFlag = false;
for (int i=0;i<5;i++) {
if (!TextUtils.isEmpty(mChannelName[i])) {
if (mRecordName.equals(mChannelName[i])) {
Editor edit = sharedPreferences.edit();
edit.putString("channel"+i, "");
edit.commit();
findFlag = true;
Toast.makeText(this,mChannelName[i]+getString(R.string.unfavorite_success),Toast.LENGTH_SHORT).show();
break;
}
}
}
if (!findFlag) {
for (int i=0;i<5;i++) {
if (TextUtils.isEmpty(mChannelName[i])) {
Editor edit = sharedPreferences.edit();
edit.putString("channel"+i, mRecordName);
edit.commit();
Toast.makeText(this,mRecordName+getString(R.string.favorite_success),Toast.LENGTH_SHORT).show();
break;
}
}
}
mCmmbAdapter.notifyDataSetChanged();
} else {
String [] mChannelName = new String [5];
SharedPreferences sharedPreferences=getSharedPreferences("mbbmsfavoriteinfo",Context.MODE_PRIVATE);
for (int i=0;i<5;i++) {
mChannelName[i] = sharedPreferences.getString("channel"+i,"");
}
String mRecordName = mMbbmsChannelList.get(mFavoriteFlag).m_Name;
boolean findFlag = false;
//already exist,remove it
for (int i=0;i<5;i++) {
if (!TextUtils.isEmpty(mChannelName[i])) {
if (mRecordName.equals(mChannelName[i])) {
Editor edit = sharedPreferences.edit();
edit.putString("channel"+i, "");
edit.commit();
findFlag = true;
Toast.makeText(this,mChannelName[i]+getString(R.string.unfavorite_success),Toast.LENGTH_SHORT).show();
break;
}
}
}
//not exist,add it
if (!findFlag) {
for (int i=0;i<5;i++) {
if (TextUtils.isEmpty(mChannelName[i])) {
Editor edit = sharedPreferences.edit();
edit.putString("channel"+i, mRecordName);
edit.commit();
Toast.makeText(this,mRecordName+getString(R.string.favorite_success),Toast.LENGTH_SHORT).show();
break;
}
}
}
mMbbmsAdapter.notifyDataSetChanged();
}
break;
}
return super.onContextItemSelected(item);
}
private class MbbmsChannelAdapter extends ArrayAdapter<MBBMSService> {
public MbbmsChannelAdapter(Context context, ArrayList<MBBMSService> mList) {
super(context, 0, mList);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
MBBMSService info = mMbbmsChannelList.get(position);
Log.i(TAG,"---------------MbbmsAdapter channnel is "+info.m_Name);
Log.i(TAG," position is "+position);
boolean findFlag = false;
if (convertView == null) {
final LayoutInflater inflater = getLayoutInflater();
convertView = inflater.inflate(R.layout.text_view, parent, false);
}
ImageView mLock = (ImageView) convertView.findViewById(R.id.lock_channel);
if (info.m_isSubscribed == true || info.m_forfree){
mLock.setImageResource(R.drawable.unlock);
} else {
mLock.setImageResource(R.drawable.lock);
}
TextView aChannel = (TextView) convertView.findViewById(R.id.one_channel);
aChannel.setText((CharSequence)info.m_Name);
TextView time = (TextView) convertView.findViewById(R.id.time_item);
TextView describe = (TextView) convertView.findViewById(R.id.describe_item);
for (int i=0;i<mMbbmsContentList.size();i++) {
if (info.m_id.equalsIgnoreCase(mMbbmsContentList.get(i).m_ServiceReferenceidRef)){
findFlag = true;
String [] start = mMbbmsContentList.get(i).m_StartTime.split(" ");
String [] end = mMbbmsContentList.get(i).m_EndTime.split(" ");
time.setText(start[1]+" "+end[1]);
describe.setText(" "+mMbbmsContentList.get(i).m_Name);
Log.i(TAG,"****************convertview position is "+position+":"+info.m_Name+" :"+mMbbmsContentList.get(i).m_Name);
break;
}
}
if (!findFlag) {
time.setText("");
describe.setText("");
}
ImageView mFavoView = (ImageView) convertView.findViewById(R.id.favo_channel);
mFavoView.setImageResource(R.drawable.collection);
mFavoView.setVisibility(View.GONE);
String [] mChannelName = new String [5];
SharedPreferences sharedPreferences=getSharedPreferences("mbbmsfavoriteinfo",Context.MODE_PRIVATE);
String channelName0 = sharedPreferences.getString("channel0","");
for (int i=0;i<5;i++) {
mChannelName[i] = sharedPreferences.getString("channel"+i,"");
}
for (int i=0;i<5;i++) {
if (info.m_Name.equals(mChannelName[i])) {
mFavoView.setVisibility(View.VISIBLE);
break;
}
}
return convertView;
}
}
private class CmmbChannelAdapter extends ArrayAdapter<ServiceInfo> {
public CmmbChannelAdapter(Context context, ArrayList<ServiceInfo> mList) {
super(context, 0, mList);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
boolean findFlag = false;
final ServiceInfo info = mCmmbChannelList.get(position);
if (convertView == null) {
final LayoutInflater inflater = getLayoutInflater();
convertView = inflater.inflate(R.layout.text_view, parent, false);
}
ImageView mLockView = (ImageView) convertView.findViewById(R.id.lock_channel);
if (info.mForFree == false) {
mLockView.setImageResource(R.drawable.lock);
} else {
mLockView.setImageResource(R.drawable.unlock);
}
TextView mChannel = (TextView) convertView.findViewById(R.id.one_channel);
mChannel.setText(info.mFreqNo+" "+info.mName);
TextView time = (TextView) convertView.findViewById(R.id.time_item);
TextView describe = (TextView) convertView.findViewById(R.id.describe_item);
for (int i=0;i<mScheduleList.size();i++) {
if (info.mId == mScheduleList.get(i).mServiceId){
findFlag = true;
String [] start = mScheduleList.get(i).mBeginTime.split(" ");
String [] end = mScheduleList.get(i).mEndTime.split(" ");
time.setText(start[1]+" "+end[1]);
describe.setText(" "+mScheduleList.get(i).mTitleStr);
Log.i(TAG,"****************convertview position is "+position+":"+info.mName+" :"+mScheduleList.get(i).mTitleStr);
break;
}
}
if (!findFlag) {
time.setText("");
describe.setText("");
}
ImageView mFavoView = (ImageView) convertView.findViewById(R.id.favo_channel);
mFavoView.setImageResource(R.drawable.collection);
mFavoView.setVisibility(View.GONE);
String [] mChannelName = new String [5];
SharedPreferences sharedPreferences=getSharedPreferences("favoriteinfo",Context.MODE_PRIVATE);
String channelName0 = sharedPreferences.getString("channel0","");
for (int i=0;i<5;i++) {
mChannelName[i] = sharedPreferences.getString("channel"+i,"");
}
for (int i=0;i<5;i++) {
if (info.mName.equals(mChannelName[i])) {
mFavoView.setVisibility(View.VISIBLE);
break;
}
}
return convertView;
}
}
public void bindChannelList() {
if (simIn) {
Log.i(TAG,"bind mbbms ChannelList carry out");
mMbbmsAdapter.notifyDataSetChanged();
} else {
Log.i(TAG,"bind cmmb ChannelList carry out");
mCmmbAdapter.notifyDataSetChanged();
}
}
public Handler getMyHandler() {
return mHandler;
}
public boolean handleMessage(Message msg) {
Log.i(TAG, "msg.what = " + msg.what);
if (msg.what == InnoMbbmsOperate.SERVICE_UPDATESG_COMPLETED)
{
if (mInnoMbbmsOperate.mStatus == InnoMbbmsOperate.STATUS_START)
{
mDialog.dismiss();
}
if (msg.arg1 == 0)
{
Toast.makeText(this, getString(R.string.init_sg_sucess), Toast.LENGTH_SHORT).show();
mDialog = ProgressDialog.show(this, "MBBMS", getString(R.string.init_st), true);
}
else
{
Toast.makeText(this, getString(R.string.init_sg_fail), Toast.LENGTH_SHORT).show();
}
}
else if (msg.what == InnoMbbmsOperate.SERVICE_UPDATEST_COMPLETED)
{
if (mInnoMbbmsOperate.mStatus == InnoMbbmsOperate.STATUS_START)
{
mDialog.dismiss();
}
if (msg.arg1 == 128 || msg.arg1 == 129 || msg.arg1 == 130)
{
Toast.makeText(this, getString(R.string.init_st_success), Toast.LENGTH_SHORT).show();
if (!Inited)
{
Inited = true;
mDialog = ProgressDialog.show(this, "MBBMS", getString(R.string.init_gba), true);
}
mMbbmsChannelList.clear();
if (mInnoMbbmsOperate.m_MbbmsServiceArray != null) {
Log.i(TAG, "rService length = " + mInnoMbbmsOperate.m_MbbmsServiceArray.length);
for (int i = 0; i < mInnoMbbmsOperate.m_MbbmsServiceArray.length; i++) {
Log.i(TAG, "add service id = " + mInnoMbbmsOperate.m_MbbmsServiceArray[i].m_id + "; name = "
+ mInnoMbbmsOperate.m_MbbmsServiceArray[i].m_Name + "; subscribed=" + mInnoMbbmsOperate.m_MbbmsServiceArray[i].m_isSubscribed);
mMbbmsChannelList.add(mInnoMbbmsOperate.m_MbbmsServiceArray[i]);
}
}
bindChannelList();
}
else
{
Toast.makeText(this, getString(R.string.init_st_fail), Toast.LENGTH_SHORT).show();
}
}
else if (msg.what == InnoMbbmsOperate.SERVICE_INITIALIZE_COMPLETED)
{
if (mInnoMbbmsOperate.mStatus == InnoMbbmsOperate.STATUS_START)
{
mDialog.dismiss();
mInnoMbbmsOperate.mStatus = InnoMbbmsOperate.STATUS_IDLE;
}
if (msg.arg1 == 0)
{
Toast.makeText(this, getString(R.string.gba_ok), Toast.LENGTH_SHORT).show();
}
else
{
Toast.makeText(this, getString(R.string.gba_fail), Toast.LENGTH_SHORT).show();
}
}
else if (msg.what == InnoCmmbService.SOURCE_SERVICE) {
if (mDialog.isShowing()) {
mDialog.dismiss();
}
ServiceInfo[] rService = InnoCmmbService
.INNO_GetAllCMMBServiceInfo(0);
if (rService != null) {
Log.i(TAG, "################# mService length = " + rService.length);
for (int i = 0; i < rService.length; i++) {
//filter the channel which name is number
if (rService[i].mName.startsWith("1")) {
continue;
} else if (rService[i].mName.startsWith("2")) {
continue;
} else if (rService[i].mName.startsWith("3")) {
continue;
} else if (rService[i].mName.startsWith("4")) {
continue;
}
boolean bExist = false;
for (int j = 0; j < mCmmbChannelList.size(); j++) {
ServiceInfo service = mCmmbChannelList.get(j);
if (service.mId == rService[i].mId
&& service.mFreqNo == rService[i].mFreqNo) {
bExist = true;
break;
}
}
if (!bExist) {
mCmmbChannelList.add(rService[i]);
}
}
} else {
Log.i(TAG,"can not get ServiceInfo ..........");
}
//add
ScheduleInfo[] a = InnoCmmbService.INNO_GetAllCMMBScheduleInfo(0, 0);
if (a!=null) {
for (int i=0;i<a.length;i++) {
if (a[i].mBeginTime.contains(today)
&& a[i].mBeginTime.compareToIgnoreCase(mCurrentTime) <= 0
&& a[i].mDescription.compareToIgnoreCase(mCurrentTime) > 0) {
mScheduleList.add(i, a[i]);
}
}
Log.i(TAG, "schedule number is "+a.length);
} else {
Log.i(TAG, "can not get schedule info");
}
bindChannelList();
}
else if (msg.what == InnoMbbmsOperate.SOURCE_INQUIRY)
{
if (mInnoMbbmsOperate.m_MbbmsSubscribePurchaseItems != null)
{
Log.i(TAG, "m_MbbmsSubscribePurchaseItems length=" + mInnoMbbmsOperate.m_MbbmsSubscribePurchaseItems.length);
for (int i=0; i<mInnoMbbmsOperate.m_MbbmsSubscribePurchaseItems.length; i++)
{
Log.i(TAG, "Unsubscribe id=" + mInnoMbbmsOperate.m_MbbmsSubscribePurchaseItems[i].m_globalPurchaseItemID
+ " name=" + mInnoMbbmsOperate.m_MbbmsSubscribePurchaseItems[i].m_Name);
if (mInnoMbbmsOperate.m_MbbmsSubscribePurchaseItems[i].m_service != null)
{
for (int j=0; j<mInnoMbbmsOperate.m_MbbmsSubscribePurchaseItems[i].m_service.length; j++)
{
Log.i(TAG, "service id=" + mInnoMbbmsOperate.m_MbbmsSubscribePurchaseItems[i].m_service[j].m_id
+ " name=" + mInnoMbbmsOperate.m_MbbmsSubscribePurchaseItems[i].m_service[j].m_Name);
}
}
}
String[] purchaseID = new String[1];
purchaseID[0] = mInnoMbbmsOperate.m_MbbmsSubscribePurchaseItems[0].m_globalPurchaseItemID;
mInnoMbbmsOperate.Unsubscribe(purchaseID, 1);
}
}
return true;
}
}
相关文章推荐
- Android 中listView数据混乱的原因以及解决方法
- 关于Android中ListView的addHeaderView()的方法和ListView滑动不流畅的解决方法
- Android中解决ListView嵌套Viewpager时,滑动事件冲突的方法
- 完美解决Android里面scrollview嵌套及listview嵌套viewpager的滑动冲突问题的简单方法
- Android ListView滑动时出现黑屏解决方法
- Android scrollview嵌套listview 滑动事件冲突的解决方法
- Android listview的滑动冲突解决方法
- android ListView常见问题解决方法(滚动背景变黑,去除滑动时阴影,拖动时Item图片不显示)
- Android Listview 滑动过程中提示图片重复错乱的原因及解决方法
- android ftp多线程多任务下载时的listview滑动列表错乱解决方法
- Android ListView滑动后背景变黑问题解决方法
- Android中解决ListView嵌套Viewpager时,滑动事件冲突的方法
- android优化--滑动ListView列表时背景变黑的解决方法
- Android ListView 滑动背景为黑色的解决办法
- Android滑动冲突问题的解决方法
- 【Android】ListView中getView的原理与解决多轮重复调用的方法
- Android之ListView数据错误解决方法
- Android 解决SwipeRefreshLayout与ListView和ScrollView滑动冲突
- Listview滑动过程中item出现数据错乱的解决方法
- [转]Android ListView滑动过程中图片显示重复错乱闪烁问题解决