Android 在片段和活动之间共享布局

Android 在片段和活动之间共享布局,android,android-fragments,Android,Android Fragments,我有一个包含GridView和按钮的主布局 在阅读之前请注意:我使用片段的原因是因为我同时在GridView中显示了很多图像,所以我设置了片段类来有效地处理它们,而不会影响性能 我希望处理GridView行为的片段与处理按钮行为的活动分开(我的主片段和活动都共享相同的布局) 当我尝试这样做时,应用程序加载,加载所有图像,按钮出现。 当我点击按钮(我已经为它设置了一个标签)时,控制台中没有显示我按下按钮的标签消息 然后,当我按下手机上的“后退”按钮时,GridView将消失,并且该按钮仅存在,然后

我有一个包含GridView和按钮的主布局

在阅读之前请注意:我使用片段的原因是因为我同时在GridView中显示了很多图像,所以我设置了片段类来有效地处理它们,而不会影响性能

我希望处理GridView行为的片段与处理按钮行为的活动分开(我的主片段和活动都共享相同的布局)

当我尝试这样做时,应用程序加载,加载所有图像,按钮出现。 当我点击按钮(我已经为它设置了一个标签)时,控制台中没有显示我按下按钮的标签消息

然后,当我按下手机上的“后退”按钮时,GridView将消失,并且该按钮仅存在,然后单击该按钮后,标签消息将在控制台中显示该消息

我将如何着手解决这个问题,还有,我在这里所做的,这是一个好主意还是一个坏主意?提前谢谢

XML:

主要片段:

public class ImageGridActivity extends FragmentActivity {
private static final String TAG = "ImageGridActivity";

@Override
protected void onCreate(Bundle savedInstanceState) {
    if (BuildConfig.DEBUG) {
        Utils.enableStrictMode();
    }
    super.onCreate(savedInstanceState);

    if (getSupportFragmentManager().findFragmentByTag(TAG) == null) {
        final FragmentTransaction ft = getSupportFragmentManager()
                .beginTransaction();
        ft.add(android.R.id.content, new ImageGridFragment(), TAG);
        ft.commit();
    }

}
}
  • 您正在MainActivity的onCreate中启动ImageGridActivity。这意味着,一旦MainACtivity启动,它就会启动ImageGridActivity

  • SearchListButton位于MainActivity中,但ImageGridActivity位于activities堆栈的顶部。这就是为什么没有点击按钮的原因。MainActivity已失去焦点并移动到活动堆栈中的下一个位置

  • 按back键时,ImageGridActivity将被销毁,MainActivity将处于焦点。现在SeachListButton点击工作

  • 建议是,


    您可以在一些事件上启动ImageGridActivity,如单击按钮。为什么你需要两项活动?为什么不只是ImagerDactivity?

    您应该制作一个框架布局来代替GridView,并且应该将片段附加到该框架布局上。您的片段布局将具有GridView。在片段中,根据需要对Gridview进行操作。按钮的侦听器应处于活动状态。
    public class MainActivity extends Activity {
    
    public static String TAG = "Test";
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.image_grid_fragment);
    
        startActivity(new Intent(this, ImageGridActivity.class));
    
        Button SearchListButton = (Button) findViewById(R.id.button1);
        SearchListButton.setOnClickListener(new View.OnClickListener() {
    
            @Override
            public void onClick(View v) {
    
                Log.d(TAG, "clicked");
    
            }
        });
    }
    
    }
    
    public class ImageGridActivity extends FragmentActivity {
    private static final String TAG = "ImageGridActivity";
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        if (BuildConfig.DEBUG) {
            Utils.enableStrictMode();
        }
        super.onCreate(savedInstanceState);
    
        if (getSupportFragmentManager().findFragmentByTag(TAG) == null) {
            final FragmentTransaction ft = getSupportFragmentManager()
                    .beginTransaction();
            ft.add(android.R.id.content, new ImageGridFragment(), TAG);
            ft.commit();
        }
    
    }
    }