Java Android将活动类集成到片段中
我正在开发一个android应用程序,它可以显示听力测试的结果。它是前一段时间制作的,所以很多代码都被贬低了。旧代码使用一个Java Android将活动类集成到片段中,java,android,android-fragments,actionbarsherlock,Java,Android,Android Fragments,Actionbarsherlock,我正在开发一个android应用程序,它可以显示听力测试的结果。它是前一段时间制作的,所以很多代码都被贬低了。旧代码使用一个选项卡activity,该选项卡工作正常: public class TabbedResultActivity extends TabActivity { private TabHost mTabHost; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(s
选项卡activity
,该选项卡工作正常:
public class TabbedResultActivity extends TabActivity {
private TabHost mTabHost;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.tabbed_results);
setTabs();
}
private void setTabs() {
mTabHost = getTabHost();
addTab(R.string.Left_ear, false);
addTab(R.string.Right_ear, true);
}
private void addTab(int labelId, boolean aRight) {
Intent intent = createIntent(aRight);
TabHost.TabSpec spec = mTabHost.newTabSpec("tab" + labelId);
View tabIndicator = LayoutInflater.from(this).inflate(R.layout.tab_indicator, getTabWidget(), false);
TextView title = (TextView) tabIndicator.findViewById(R.id.title);
title.setTextSize(14.0f);
title.setText(labelId);
spec.setIndicator(tabIndicator);
spec.setContent(intent);
mTabHost.addTab(spec);
}
private Intent createIntent( boolean aRight) {
Intent newIntent = new Intent(getIntent());
newIntent.putExtra(ResultActivity.IS_RIGHT_EAR, aRight);
newIntent.setClass(this, ResultActivity.class);
return newIntent;
}
但是,我遇到的问题是,我必须为新设备上的菜单添加一个操作栏。为了使应用程序在所有设备上兼容,我使用了ActionBarSherlock
库。这很好,但我不知道如何将我的ResultsActivity
添加到片段中,因为我需要ResultsActivity
从SherlockFragmentActivity
扩展,但要将其集成到片段中,我需要扩展SherlockFragment
类。如果我这样做,我会收到大量错误,因为它不是从活动扩展而来的。这是我最初的ResultsActivity
课程:
public class ResultActivity extends SherlockFragmentActivity {
public static final String IS_RIGHT_EAR = "is_right_ear";
private ArrayList<EarSrt> leftAnswerList;
private ArrayList<EarSrt> rightAnswerList;
private boolean isRightEarTab = true;
private boolean bothEarsBad;
private boolean leftEarBad;
private boolean rightEarBad;
@SuppressWarnings("unchecked")
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.results_layout);
Intent intent = getIntent();
int rowId = intent.getIntExtra(ResultsDatabase._ID, -1);
if ( rowId != -1 ) {
ResultsDatabase db = new ResultsDatabase(this);
String select = "(" + ResultsDatabase._ID + " == " + rowId + ")";
Cursor c = db.getReadableDatabase().query(ResultsDatabase.TABLE_NAME, null, select, null, null, null,null);
if ( c.moveToFirst() ) {
int leftEarColumn = c.getColumnIndex(ResultsDatabase.LEFT_EAR);
byte[] leftEarByteArray = c.getBlob(leftEarColumn);
int rightEarColumn = c.getColumnIndex(ResultsDatabase.RIGHT_EAR);
byte[] rightEarByteArray = c.getBlob(rightEarColumn);
leftAnswerList = (ArrayList<EarSrt>) ResultsDatabase.deserializeObject(leftEarByteArray);
rightAnswerList = (ArrayList<EarSrt>) ResultsDatabase.deserializeObject(rightEarByteArray);
}
} else {
byte[] leftEarByteArray = getIntent().getByteArrayExtra(ResultsDatabase.LEFT_EAR);;
byte[] rightEarByteArray = getIntent().getByteArrayExtra(ResultsDatabase.RIGHT_EAR);
leftAnswerList = (ArrayList<EarSrt>) ResultsDatabase.deserializeObject(leftEarByteArray);
rightAnswerList = (ArrayList<EarSrt>) ResultsDatabase.deserializeObject(rightEarByteArray);
}
isRightEarTab = getIntent().getBooleanExtra(IS_RIGHT_EAR, true);
GraphView graphView = (GraphView)findViewById(R.id.graphview);
if ( isRightEarTab ) {
graphView.setPoints(rightAnswerList);
float average = calculateAverage(rightAnswerList);
graphView.setAverage(average);
} else {
graphView.setPoints(leftAnswerList);
float average = calculateAverage(leftAnswerList);
graphView.setAverage(average);
}
setResults(leftAnswerList, rightAnswerList);
}
private float calculateAverage(List<EarSrt> steps) {
float srt = 0.0f;
int length = steps.size();
for (int i = (int)Math.ceil( (float)length/(float)2); i < length; i++) {
EarSrt es = steps.get(i);
srt += es.getSrt();
//printf("%f ," , [es srt]);
}
srt = srt / (length-(float)Math.ceil( (float)length/(float)2));
// printf("\n%f\n" , srt);
return srt;
}
private void setResults(List<EarSrt> leftEar, List<EarSrt> rightEar) {
float esLeft = calculateAverage(leftEar);
float esRight = calculateAverage(rightEar);
leftEarBad = (esLeft > 24.0);
rightEarBad = (esRight > 24.0);
bothEarsBad = (leftEarBad && rightEarBad);
setResultCaption(bothEarsBad, leftEarBad, rightEarBad);
}
/**
* TODO: this needs finishing
*/
private void setResultCaption(boolean bothEarsBad, boolean leftEarBad, boolean rightEarBad) {
TextView resultsTextView = (TextView)findViewById(R.id.results_text);
StringBuilder resultsText = new StringBuilder();
if (bothEarsBad) {
resultsText.append(getString(R.string.The_test_indicates_a_possible_hearing_loss));
resultsText.append(getString(R.string.We_recommend_that_you_visit_a_Hearing_Care_Professional_for_a_comprehensive_hearing_check));
}else{
if (leftEarBad) {
resultsText.append(getString(R.string.The_test_indicates_a_possible_hearing_loss_for_your_left_ear));
resultsText.append(getString(R.string.We_recommend_that_you_visit_a_Hearing_Care_Professional_for_a_comprehensive_hearing_check));
} else if (rightEarBad) {
resultsText.append(getString(R.string.The_test_indicates_a_possible_hearing_loss_for_your_Right_ear));
resultsText.append(getString(R.string.We_recommend_that_you_visit_a_Hearing_Care_Professional_for_a_comprehensive_hearing_check));
}else {
resultsText.append(getString(R.string.There_is_no_indication_of_hearing_loss));
}
}
resultsText.append(getString(R.string.The_results_of_the_hearing_test_are_not_to_be_utilized_as_an_official_outcome_for_assessing_levels_of_hearing_loss_True_hearing_loss_assessments_can_only_be_determined_by_a_licensed_hearing_healthcare_provider));
resultsTextView.setText(resultsText.toString());
}
public void goToLocate(View aView){
Intent locate = new Intent( this, LocateActivity.class);
startActivity(locate);
finish();
}
}
公共类结果性扩展了SherlockFragmentActivity{
公共静态最终字符串为\u RIGHT\u EAR=“IS\u RIGHT\u EAR”;
私有ArrayList leftAnswerList;
私人ArrayList rightAnswerList;
私有布尔值isRightEarTab=true;
私家布尔值不好;
私有布尔左耳坏;
私有布尔右耳巴德;
@抑制警告(“未选中”)
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.results\u布局);
Intent=getIntent();
int rowId=intent.getIntExtra(ResultsDatabase.\u ID,-1);
如果(rowId!=-1){
ResultsDatabase db=新的ResultsDatabase(此);
字符串select=“(“+ResultsDatabase.\u ID+”==“+rowId+”);
游标c=db.getReadableDatabase().query(ResultsDatabase.TABLE_NAME,null,select,null,null,null,null);
if(c.moveToFirst()){
int leftEarColumn=c.getColumnIndex(ResultsDatabase.leftear);
字节[]leftEarByteArray=c.getBlob(leftEarColumn);
int righterColumn=c.getColumnIndex(ResultsDatabase.RIGHT\u EAR);
字节[]rightEarByteArray=c.getBlob(rightEarColumn);
leftAnswerList=(ArrayList)ResultsDatabase.deserializeObject(leftEarByteArray);
rightAnswerList=(ArrayList)ResultsDatabase.deserializeObject(rightEarByteArray);
}
}否则{
字节[]leftearbytarray=getIntent().getByteArrayExtra(ResultsDatabase.LEFT_EAR);;
字节[]rightEarByteArray=getIntent().getByteArrayExtra(ResultsDatabase.RIGHT_EAR);
leftAnswerList=(ArrayList)ResultsDatabase.deserializeObject(leftEarByteArray);
rightAnswerList=(ArrayList)ResultsDatabase.deserializeObject(rightEarByteArray);
}
isRightEarTab=getIntent().getBooleanExtra(是右耳,真的);
GraphView GraphView=(GraphView)findViewById(R.id.GraphView);
如果(iRightearTab){
图形视图设定点(右侧应答列表);
浮动平均值=计算平均值(rightAnswerList);
graphView.setAverage(平均值);
}否则{
图形视图设定点(左应答列表);
浮动平均值=计算平均值(leftAnswerList);
graphView.setAverage(平均值);
}
setResults(leftAnswerList、rightAnswerList);
}
专用浮点运算范围(列出步骤){
浮动srt=0.0f;
int length=steps.size();
对于(inti=(int)Math.ceil((float)length/(float)2);i24.0);
rightEarBad=(esRight>24.0);
bothEarsBad=(leftEarBad和&righearbad);
设置结果选项(bothEarsBad、leftEarBad、righearbad);
}
/**
*TODO:这需要完成
*/
private void SetResultOption(布尔型bothEarsBad、布尔型leftEarBad、布尔型rightEarBad){
TextView结果TextView=(TextView)findViewById(R.id.results\u text);
StringBuilder resultsText=新建StringBuilder();
如果(坏的){
resultsText.append(getString(R.string.The_test_表示可能的听力损失));
resultsText.append(getString(R.string.我们建议您访问听力护理专业人员进行全面听力检查));
}否则{
if(leftEarBad){
resultsText.append(getString(R.string.The_test_表示您的左耳可能听力受损);
resultsText.append(getString(R.string.我们建议您访问听力护理专业人员进行全面听力检查));
}else if(righterabad){
resultsText.append(getString(R.string.The_test_表示您的右耳可能听力受损);
resultsText.append(getString(R.string.我们建议您访问听力护理专业人员进行全面听力检查));
}否则{
resultsText.append(getString(R.string.There没有听力丧失的迹象));
}
}
resultsText.append(getString(R.string.听力测试的结果未被用作官方结果,用于评估听力水平、真实听力损失、评估听力损失,只能由持有执照的听力保健提供者确定));
resultsTextView.setText(resultsText.toString());
}
公共void gotolotate(查看视图){
意向定位=新意向(此,LocateActivity.class);
星触觉(定位);
完成();
}
}
我基本上需要将这段代码集成到两个片段中,一个用于左耳,一个用于右耳。我试过看夏洛克的碎片样本,但还是不知道怎么做。如果有人能给我指出正确的方向,那将非常有帮助
提前谢谢。您好,您可以找到演示和代码e