0

私は5つのタブを持つタブビューを持っています.それぞれが単一のアクティビティです.1つのタブでは、アラートを開く新しいアクティビティを開いています.今まではすべて正常に動作しています.

私の問題は、親アクティビティの onBackPressed を呼び出している子アクティビティ ([戻る] ボタンを押す) から戻ってきたときです。そのため、子アクティビティから [戻る] ボタンを押しgetLocalActivityManager().getCurrentActivity().toString()ているときにも動作するアクティビティ名を確認しています。アクティビティ名を確認します。を使用してgetLocalActivityManager().getCurrentActivity().toString()

しかし、親アクティビティから戻るボタンを押すと、NullPointer Exception が発生します。getLocalActivityManager().getCurrentActivity().toString()親アクティビティから呼び出すと機能しない可能性があります

LogCat エラー

ここに画像の説明を入力

親の活動

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();
    }
}
}

子供の活動

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);
}
 }
4

1 に答える 1

2

この手順でエラーが発生しているため、それを取り除く最も簡単な方法は、次のように変更することです

//@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();
    }
}
于 2013-03-15T17:12:37.150 に答える