2013-03-15 4 views
0

5 탭이있는 탭 뷰가 있습니다. 각 탭마다 하나의 액티비티입니다. 하나의 탭에서 경고를 여는 새 액티비티가 열립니다. 이제 모든 것이 작동합니다. 벌금.getLocalActivityManager()에서 nullpointer 예외가 발생했습니다. getCurrentActivity()

내 문제는 (Back button press)에서 돌아 오는 것입니다. 그 자식 활동은 부모 활동입니다. 따라서 하위 활동에서 뒤로 버튼을 누르면 활동 이름 getLocalActivityManager().getCurrentActivity().toString()을 확인하고 있습니다. getLocalActivityManager().getCurrentActivity().toString()을 사용하여 활동 이름을 확인합니다.

하지만 부모 작업에서 뒤로 버튼을 누르면 NullPointer 예외가 발생합니다. 부모 활동에서

로그 캣 오류

enter image description here

학부모 활동

public class ProgressActivity extends ActivityGroup 
{ 
private ArrayList<View> history; 
public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.progress_tabview); 
    this.history = new ArrayList<View>(); 
} 
public void showProgress(View v) 
{ 
    Intent intMyProg = new Intent(this,ShowProgress.class); 
    //intMyProg.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP); 
    //startActivity(intMyProg); 

    //This will help to open a new activity within existing TabView 
    //Need to extend ActivityGroup 
    //Need to declare "private ArrayList<View> history;" 
    //Need to Define "this.history = new ArrayList<View>();" within onCreate 
    View MyView = getLocalActivityManager() 
      .startActivity("MyIntent", intMyProg 
      .addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP)) 
      .getDecorView(); 


    replaceView(MyView); 
} 

public void replaceView(View v) 
{ 
    history.add(v); 
    setContentView(v); 
} 

//@Override 
public void onBackPressed() 
{ 
    String activityName = getLocalActivityManager().getCurrentActivity().toString(); 

    if(activityName.contains("ShowProgress")) 
    { 
     getCurrentActivity().onBackPressed(); 
    } 
    else 
    { 
     Toast.makeText(getApplicationContext(), "Back button from parent Activity", Toast.LENGTH_SHORT).show(); 
     //finish(); 
    } 
} 
} 

아동 활동

를 호출 할 때 getLocalActivityManager().getCurrentActivity().toString() 작동하지 않을 수 있음 이 절차에 오류가 발생하고 있기 때문에
public class ShowProgress extends ActivityGroup 
{ 
private ArrayList<View> history; 
public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.progress); 
    this.history = new ArrayList<View>(); 

    AlertDialog alertDialog = new AlertDialog.Builder(ShowProgress.this.getParent()).create(); 
    alertDialog.setTitle("Hello ..."); 
    alertDialog.setMessage("Hello world this is Anirban !"); 
    alertDialog.setIcon(R.drawable.tick); 
    alertDialog.setButton("OK", new DialogInterface.OnClickListener() 
    { 
     public void onClick(DialogInterface dialog, int which) 
     { 
      //Toast.makeText(getApplicationContext(), "You clicked on OK", Toast.LENGTH_SHORT).show(); 
     } 
    }); 
    alertDialog.show(); 
} 

//@Override 
public void onBackPressed() 
{ 
    Intent intMyProg = new Intent(this,ProgressActivity.class); 
    View MyView = getLocalActivityManager() 
      .startActivity("MyIntent", intMyProg 
      .addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP)) 
      .getDecorView(); 

    replaceView(MyView); 
} 

public void replaceView(View v) 
{ 
    history.add(v); 
    setContentView(v); 
} 
} 
+0

당신은 아마 getLocalActivityManager()를 확인해야합니다. getCurrentActivity()처럼 변경하는 것 (변수에 먼저 할당하는 경우). 또한 : 귀하의 logcat – DigCamara

+0

logcat을 게시하고 null 확인은 절차가 아닙니다. – Anirban

답변

2

, 가장 간단한 방법은 그것을 제거 할 수는 널 (null)이

//@Override 

public void onBackPressed() 
{ 
    LocalActivityManager localManager = getLocalActivityManager(); 
    Activity currentActivity = null; 
    if (localManager!=null){ 
      currentActivity = localManager.getCurrentActivity(); 
    } 

    String activityName = null; 
    if (currentActivity!=null){ 
     activityName = currentActivity.toString() 
    } 

    if(activityName!=null && (activityName.contains("ShowProgress")) 
    { 
     getCurrentActivity().onBackPressed(); 
    } 
    else 
    { 
     Toast.makeText(getApplicationContext(), "Back button from parent Activity", Toast.LENGTH_SHORT).show(); 
     //finish(); 
    } 
} 
+0

그것은 작동 남자 감사합니다 – Anirban

+1

당신은 오신 것을 환영합니다! – DigCamara

+0

다시 최대 득표 됨 – Anirban