gpt4 book ai didi

java - 如何在 fragment 中实现监听器接口(interface)?

转载 作者:行者123 更新时间:2023-11-29 03:23:38 24 4
gpt4 key购买 nike

我试图在一个 Activity 和位于它之上的 fragment 之间进行通信,我希望每次发生 onclick 时将新数据(图像/文本 - 从数据库中检索)传递到 fragment 中(onclick 在 Activity )。我做了一个简单的界面来测试(让我知道这是否不适合图像,或者它是否太慢或效率低下),我试图将它包含在我的 fragment 中所以当发生点击时 fragment 会改变图像和文本。

这是简单的接口(interface)代码:

public interface FragmentCommunicator {
public void passDataToFragment(String someValue);
}

这是 Activity 代码:

public class RandomActivity extends FragmentActivity implements ActivityCommunicator {

//viewpager adapter
private PageAdapter mAdapter;
private ViewPager viewPager;

//interface through which communication is made to fragment
public FragmentCommunicator fragmentCommunicator;

//Buttons for yes, no, skip
Button btnYesRandom, btnNoRandom, btnSkipRandom;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_random);

//set buttons
btnYesRandom = (Button) findViewById(R.id.btnYesRandom);

// Initializing pager
viewPager = (ViewPager) findViewById(R.id.random_pager);

//calling bundle to attach data to fragment
Bundle bundle = new Bundle();
bundle.putString("edttext", "From Activity");

// set Fragmentclass Arguments
RandomFragment randFrag = new RandomFragment();
randFrag.setArguments(bundle);

//Setting up fragment
FragmentManager fm = getFragmentManager();
mAdapter = new PageAdapter(getSupportFragmentManager(), new UserUpVotesFragment(), randFrag, new UserDownVotesFragment());
viewPager.setAdapter(mAdapter);
// Here you would declare which page to visit on creation
viewPager.setCurrentItem(1);

viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
public void onPageScrollStateChanged(int state) {}
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {}

public void onPageSelected(int position) {
// Check if this is the page you want.
if(position !=1) {
//swiping to the right
if(position == 0) {
Log.e("Swiping", "SWIPING TO THE Right BUT RESET ERR");
getIntent().removeExtra("edttext");
}

//swiping to the left
if(position == 2) {
Log.e("Swiping", "SWIPING TO THE left BUT RESET ERR");
}

// RandomFragment randomFrag = (RandomFragment) getFragmentManager().findFragmentById(R.id.fra);

viewPager.setCurrentItem(1);
}
}
});

btnYesRandom.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {

if(fragmentCommunicator != null)
fragmentCommunicator.passDataToFragment("Hi from FragmentActivity");
}
});
}

fragment 代码:

public class RandomFragment extends Fragment {

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {

//call data from activity bundle
String strtext = getArguments().getString("edttext");

View rootView = inflater.inflate(R.layout.fragment_random, container, false);

RelativeLayout random_frag_layout = (RelativeLayout) rootView.findViewById(R.id.random_frag_layout);

activityButton = (ImageView) rootView.findViewById(R.id.imagehere);
//setRetainInstance(true);

texthere = (TextView) rootView.findViewById(R.id.texthere);
texthere.setText(strtext);

return rootView;
}

//FragmentCommunicator interface implementation
public void passDataToFragment(String someValue){
activityAssignedValue = someValue;
Log.e("ACTIVITY", activityAssignedValue);
}
}

最佳答案

如果您只有一个 fragment ,那么您可以直接访问它并通过方法发送任何数据:将您的 fragment 设为一个字段并从 Activity 中调用您的 passDataToFragment()

要从 fragment 访问 Activity ,请调用 ((RandomActivity)getActivity()).activityMethod()

关于java - 如何在 fragment 中实现监听器接口(interface)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22212508/

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