做的是智能TV,手机上触屏那套Listview的方式当然就有问题,第一个,首次进入Listview发现条目没有焦点。第二个,使用Listview发现onKeyDown(int keycode,KeyEvent event)不起作用。解决这两个问题,网上找到方法,
第一个问题:
Instrumentation inst = new Instrumentation();
inst.setInTouchMode(false);//listView首次进入无焦点的解决办法。在listview生成前,加入这两句,但是我实验不起作用。后来还是用的这个:
public void recoverFocus(){
listview_ci_debug.requestFocus();
listview_ci_debug.setSelection(0);
}
这个函数的用法对位置有特别要求,就是必须放在ui主activity中调用。放在子类中不起作用,很奇怪。
第二个问题:
public boolean dispatchKeyEvent(KeyEvent event) {
// TODO Auto-generated method stub
boolean bRet = true;
currentIndex = getCurrentIndex();
if(event.getAction()==KeyEvent.ACTION_DOWN && event.getAction() != KeyEvent.ACTION_UP){
switch (event.getKeyCode()){
//你的代码逻辑,比如
case KeyEvent.KEYCODE_DPAD_RIGHT:
break;
}
return bRet;
}
特别注意的是最后要return true;保证按键响应执行。
接下来就是直接贴代码了:
mainActivity.java
package mstar.tvsetting.factory.ui.advancedoption;
import mstar.factorymenu.ui.R;
import mstar.tvsetting.factory.desk.FactoryDeskImpl;
import mstar.tvsetting.factory.desk.IFactoryDesk;
import android.app.Activity;
import android.app.Instrumentation;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.LinearLayout;
public class AdvancedOptionActivity extends Activity {
private static final String TAG = "AdvancedOptionActivity";
private IFactoryDesk factoryDesk;
private AdvancedOptionListViewHolder advancedOptionListViewHolder;
private UpgradeExportViewHolder upgradeExportViewHolder;
private EnergyAdjustViewHolder energyAdjustViewHolder;
private SSCAdjustViewHolder sscAdjustViewHolder;
private CISettingListViewHolder ciSettingListViewHolder;
private VIFAdjustViewHolder vifAdjustViewHolder;
private VDAdjustListViewHolder vdAdjustListViewHolder;
private IPEnableMappingViewHolder ipMappingViewHolder;
private FactoryScanningViewHolder facScanningViewHolder;
private FactoryWritingViewHolder facWritingViewHolder;
private final static int ADV_MAIN_PAGE = 0;
private final static int EX_UP_ADJUST_PAGE = 1;
private final static int ENERGY_ADJUST_PAGE = 2;
private final static int SSC_ADJUST_PAGE = 3;
private final static int CI_ADJUST_PAGE = 4;
private final static int VIF_ADJUST_PAGE = 5;
private final static int VD_ADJUST_PAGE = 6;
private final static int IP_MAPPING_PAGE = 7;
private final static int MAC_SCANNING_PAGE = 8;
private final static int MAC_WRITING_PAGE = 9;
private final static int WIFIMAC_SCANNING_PAGE = 10;
private final static int WIFIMAC_WRITING_PAGE = 11;
private final static int EX_UP_ADJUST_INX = 101;
private final static int ENERGY_ADJUST_INX = 102;
private final static int SSC_ADJUST_INX = 103;
private final static int CI_ADJUST_INX = 104;
private final static int VIF_ADJUST_INX = 105;
private final static int VD_ADJUST_INX = 106;
private final static int IP_MAPPING_INX = 107;
private final static int MAC_SCANNING_INX = 108;
private final static int MAC_WRITING_INX = 109;
private final static int WIFIMAC_SCANNING_INX = 110;
private final static int WIFIMAC_WRITING_INX = 111;
private final static int SFU_AUTO_TEST_INX = 112;
public int currentAdvPage = ADV_MAIN_PAGE;
public boolean isSupportHDCP2 = false;
public boolean isSupportCI_Plus = false;
public static int startMacPage;
private int currentIndex = 0;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.advancedoptionviewflipper);
factoryDesk = FactoryDeskImpl.getInstance(AdvancedOptionActivity.this);
advancedOptionListViewHolder = new AdvancedOptionListViewHolder(
AdvancedOptionActivity.this, factoryDesk);
advancedOptionListViewHolder.findView();
if (advancedOptionListViewHolder.getListView() != null) {
advancedOptionListViewHolder.getListView().setOnItemClickListener(
new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
// TODO Auto-generated method stub
goToNewPage(arg2);
}
});
advancedOptionListViewHolder.getListView().setOnItemSelectedListener(
new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
// TODO Auto-generated method stub
// currentAdvPage = arg2+1;
currentIndex = arg2 + 101;
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
// TODO Auto-generated method stub
}
});
}
currentAdvPage = ADV_MAIN_PAGE;
// advancedOptionViewHolder.advancedViewFlipper.setDisplayedChild(ADV_MAIN_PAGE);
startMacPage = getIntent().getIntExtra("startMacPage", 0);
if (!AdvancedOptionActivity.this.getResources().getString(R.string.designmenu_hdcp2)
.equals("1")) {
isSupportHDCP2 = false;
} else {
isSupportHDCP2 = true;
}
if (!AdvancedOptionActivity.this.getResources().getString(R.string.designmenu_ci)
.equals("1")) {
isSupportCI_Plus = false;
} else {
isSupportCI_Plus = true;
}
}
@Override
protected void onResume() {
if (startMacPage > 0) {
currentAdvPage = MAC_SCANNING_PAGE;
advancedOptionListViewHolder.advancedViewFlipper.setDisplayedChild(MAC_SCANNING_PAGE);
facScanningViewHolder = new FactoryScanningViewHolder(AdvancedOptionActivity.this,
factoryDesk);
facScanningViewHolder.onCreate();
}
if (advancedOptionListViewHolder != null) {
advancedOptionListViewHolder.setListViewData();
}
super.onResume();
}
private void goToNewPage(int Position) {
currentIndex = Position + 101;
switch (currentIndex) {
case EX_UP_ADJUST_INX:
currentAdvPage = EX_UP_ADJUST_PAGE;
advancedOptionListViewHolder.advancedViewFlipper
.setDisplayedChild(EX_UP_ADJUST_PAGE);
upgradeExportViewHolder = new UpgradeExportViewHolder(AdvancedOptionActivity.this,
factoryDesk);
upgradeExportViewHolder.findView();
upgradeExportViewHolder.onCreate();
break;
case ENERGY_ADJUST_INX:
currentAdvPage = ENERGY_ADJUST_PAGE;
advancedOptionListViewHolder.advancedViewFlipper
.setDisplayedChild(ENERGY_ADJUST_PAGE);
energyAdjustViewHolder = new EnergyAdjustViewHolder(AdvancedOptionActivity.this,
factoryDesk);
energyAdjustViewHolder.findView();
energyAdjustViewHolder.onCreate();
break;
case SSC_ADJUST_INX:
currentAdvPage = SSC_ADJUST_PAGE;
advancedOptionListViewHolder.advancedViewFlipper.setDisplayedChild(SSC_ADJUST_PAGE);
sscAdjustViewHolder = new SSCAdjustViewHolder(AdvancedOptionActivity.this,
factoryDesk);
sscAdjustViewHolder.findView();
sscAdjustViewHolder.onCreate();
break;
case CI_ADJUST_INX:
currentAdvPage = CI_ADJUST_PAGE;
advancedOptionListViewHolder.advancedViewFlipper.setDisplayedChild(CI_ADJUST_PAGE);
ciSettingListViewHolder = new CISettingListViewHolder(AdvancedOptionActivity.this,
factoryDesk);
ciSettingListViewHolder.findView();
ciSettingListViewHold