gpt4 book ai didi

java - 如何在 fragment 的 Activity 中使用交换 fragment

转载 作者:行者123 更新时间:2023-11-30 09:12:59 25 4
gpt4 key购买 nike

我正在尝试使用一个 Activity 一次容纳 2 个 Fragments。其中一个 fragment 是,让我们称它为第一个 fragment ,正在显示的 fragment 包含一个 OnClickListener。我希望该监听器在 Activity 中调用一个方法,该方法包含将与另一个 Fragment 交换第二个 Fragment 的 Fragments。这些 fragment 都是以编程方式添加的。我有以下代码似乎会给我一个错误。

我是 android 的新手,所以代码很草率,主要用于测试,所以我会尝试解释发生了什么。

这是保存 fragment 的 Activity 的代码。该 Activity 设法成功添加到 Fragments,但是,在推送 all_jokes TextView 时收到错误。

    package com.Ayman.jokeit;

import android.app.Activity;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;


public class BrowseActivity extends FragmentActivity{
AllJokes afrag;
OneLiners olfrag;
selectFragment sfrag ;
RaceJokes rfrag;
YoMammaJokes yfrag ;
LongJokes lfrag ;
FragmentTransaction stransaction;
FragmentTransaction jtransaction;
FragmentTransaction atransaction;
FragmentManager jmanager;
FragmentManager smanager;
FragmentManager amanager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);



afrag = new AllJokes();
olfrag = new OneLiners();
sfrag = new selectFragment();
rfrag = new RaceJokes();
yfrag = new YoMammaJokes();
lfrag = new LongJokes();

setContentView(R.layout.browse);

//Creats object for fragments


//steps for adding fragment to view
smanager = getFragmentManager();
jmanager = getFragmentManager();

stransaction = smanager.beginTransaction();
stransaction.add(R.id.browse_layout, sfrag, "selectFragment");
stransaction.commit();


//steps for adding fragment to view

jtransaction = jmanager.beginTransaction();
jtransaction.add(R.id.browse_layout, olfrag, "onelinerFragment");
jtransaction.commit();

}
public void addAllJokes(){
afrag = new AllJokes();
atransaction = amanager.beginTransaction();
atransaction.replace(R.id.browse_layout, afrag, "afrag");
atransaction.commit();

}

}

这是使用 OnClickListener 的 Fragment 的代码。

OnClickListener 在 fragment (下面的代码)中调用方法 all_jokes,它引用 Activity (上面的代码)中的 addalljokes 方法。这似乎会导致错误。我尝试了多种可能的解决方案但无济于事。请帮助找到解决方案,并在可能的情况下解释原因。 (除了 All_Jokes 之外,所有 OnClickListener 都不能正常工作。

package com.Ayman.jokeit;

import com.Ayman.jokeit.AllJokes;

import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.app.Fragment;
import android.widget.TextView;

public class selectFragment extends Fragment {
BrowseActivity browseActivity = new BrowseActivity();
private TextView all_jokes;
private TextView one_liners;
private TextView yo_mamma_jokes;
private TextView race_jokes;
private TextView long_jokes;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View selectFragmentView = inflater.inflate(R.layout.select_view, container, false);
all_jokes = (TextView) selectFragmentView.findViewById(R.id.all_TextView);
one_liners = (TextView) selectFragmentView.findViewById(R.id.one_Liners_TextView);
yo_mamma_jokes = (TextView) selectFragmentView.findViewById(R.id.yo_Mama_Jokes_TextView);
race_jokes = (TextView) selectFragmentView.findViewById(R.id.race_Jokes_TextView);
long_jokes = (TextView) selectFragmentView.findViewById(R.id.long_Jokes_TextView);


all_jokes.setOnClickListener(new View.OnClickListener() {

@Override


public void onClick(View v) {
all_jokes();

}
});

one_liners.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View v) {
one_liners();

}
});

yo_mamma_jokes.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View v) {
yo_mamma_jokes();

}
});

race_jokes.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View v) {
race_jokes();

}
});

long_jokes.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View v) {
long_jokes();

}
});




return selectFragmentView;

}


public void all_jokes(){
BrowseActivity browseActivity = (BrowseActivity) getActivity();
browseActivity.addAllJokes();
}

public void one_liners(){

}

public void yo_mamma_jokes(){

}

public void race_jokes(){

}
public void long_jokes(){


}
}

先谢谢你。

编辑*

收到以下错误

01-15 15:01:16.323    6393-6393/com.Ayman.jokeit E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.Ayman.jokeit, PID: 6393
java.lang.NullPointerException
at com.Ayman.jokeit.BrowseActivity.addAllJokes(BrowseActivity.java:61)
at com.Ayman.jokeit.selectFragment.all_jokes(selectFragment.java:90)
at com.Ayman.jokeit.selectFragment$1.onClick(selectFragment.java:39)
at android.view.View.performClick(View.java:4424)
at android.view.View$PerformClick.run(View.java:18383)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4998)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:777)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:593)
at dalvik.system.NativeStart.main(Native Method)

最佳答案

您可以使用接口(interface)在 fragment 和关联 Activity 之间提供通信。您应该将接口(interface)转换为第一个 fragment 的 onAttach 方法中的 Activity 。 (有关更多信息,请参阅此 link)

关联的 Activity 应该实现该接口(interface),例如

public interface FragmentSwitcher {
void switchSecondFragment();
}

在该接口(interface)的方法回调中(在 Activity 中)执行替换 fragment 事务。这会将第二个 fragment 替换为另一个 fragment 。

有什么问题吗?在下面提问

关于java - 如何在 fragment 的 Activity 中使用交换 fragment ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21231601/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com