怎么把Android的Activity传回数值是fragment

我的BlankFragment_kind(分类页面)继承了AppCompatActivity,在导航java代码那里怎么传回fragment啊,类型都不一样,我也不会把BlankFragment_kind用fragment写,只会写Activity。

img

package com.example.smallshop;

import android.annotation.SuppressLint;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.ScrollView;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentPagerAdapter;
import androidx.viewpager.widget.ViewPager;

public class BlankFragment_kind extends Fragment {

private String[] toolsList;
private View[] views;
private LayoutInflater inflater;
private ScrollView scrollView;
private int scrllViewWidth = 0, scrollViewMiddle = 0;
private ViewPager shop_pager;
private int currentItem = 0;
private ShopAdapter shopAdapter;

public BlankFragment_kind() {
    // Required empty public constructor
}

public static BlankFragment_kind newInstance() {
    return new BlankFragment_kind();
}

@SuppressLint("MissingInflatedId")
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View rootView = inflater.inflate(R.layout.fragment_blank_kind, container, false);

    scrollView = rootView.findViewById(R.id.tools_left);
    shopAdapter = new ShopAdapter(getChildFragmentManager());
    this.inflater = LayoutInflater.from(getActivity());
    showToolsView(rootView);
    initPager(rootView);

    return rootView;
}

/**
 * 动态生成显示items中的 textview
 */
private void showToolsView(View rootView) {
    toolsList = new String[]{"潮流女装", "春夏女装 ", "品牌女装", "秋冬女装", "大码女装" };
    LinearLayout toolsLayout = rootView.findViewById(R.id.tools_up);
    TextView[] toolsTextViews = new TextView[toolsList.length];
    views = new View[toolsList.length];

    for (int i = 0; i < toolsList.length; i++) {
        @SuppressLint("InflateParams") View view = inflater.inflate(R.layout.menu_layout, null);
        view.setId(i);
        view.setOnClickListener(toolsItemListener);
        @SuppressLint({"MissingInflatedId", "LocalSuppress"}) TextView textView = view.findViewById(R.id.text);
        textView.setText(toolsList[i]);
        toolsLayout.addView(view);
        toolsTextViews[i] = textView;
        views[i] = view;
    }
}

private final View.OnClickListener toolsItemListener = new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        shop_pager.setCurrentItem(v.getId());
    }
};

/**
 * initPager<br/>
 * 初始化 ViewPager 控件相关内容
 */
private void initPager(View rootView) {
    shop_pager = rootView.findViewById(R.id.goods_pager);
    shop_pager.setAdapter(shopAdapter);
    shop_pager.addOnPageChangeListener(onPageChangeListener);
}

/**
 * OnPageChangeListener<br/>
 * 监听 ViewPager 选项卡变化事件
 */
private final ViewPager.OnPageChangeListener onPageChangeListener = new ViewPager.OnPageChangeListener() {
    @Override
    public void onPageSelected(int arg0) {
        if (shop_pager.getCurrentItem() != arg0) shop_pager.setCurrentItem(arg0);
        if (currentItem != arg0) {
            changeTextLocation(arg0);
        }
        currentItem = arg0;
    }

    @Override
    public void onPageScrolled(int arg0, float arg1, int arg2) {
    }

    @Override
    public void onPageScrollStateChanged(int arg0) {
    }
};

/**
 * ViewPager 加载选项卡
 */
private class ShopAdapter extends FragmentPagerAdapter {
    public ShopAdapter(FragmentManager fm) {
        super(fm, FragmentPagerAdapter.BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT);
    }

    @NonNull
    @Override
    public Fragment getItem(int arg0) {
        Fragment fragment = new Fragment_list();
        Bundle bundle = new Bundle();
        String str = toolsList[arg0];
        bundle.putString("typename", str);
        fragment.setArguments(bundle);
        return fragment;
    }

    @Override
    public int getCount() {
        return toolsList.length;
    }
}

/**
 * 改变栏目位置
 *
 * @param clickPosition
 */
private void changeTextLocation(int clickPosition) {
    int x = (views[clickPosition].getTop() - getScrollViewMiddle() + (getViewheight(views[clickPosition]) / 2));
    scrollView.smoothScrollTo(0, x);
}

/**
 * 返回 ScrollView 的中间位置
 *
 * @return
 */
private int getScrollViewMiddle() {
    if (scrollViewMiddle == 0)
        scrollViewMiddle = getScrollViewheight() / 2;
    return scrollViewMiddle;
}

/**
 * 返回 ScrollView 的宽度
 *
 * @return
 */
private int getScrollViewheight() {
    if (scrllViewWidth == 0)
        scrllViewWidth = scrollView.getBottom() - scrollView.getTop();
    return scrllViewWidth;
}

/**
 * 返回 view 的宽度
 *
 * @param view
 * @return
 */
private int getViewheight(View view) {
    return view.getBottom() - view.getTop();
}

}

引用 皆我百晓生 小程序回复内容作答:

如果你想把Android的Activity中的数值传回给继承自AppCompatActivity的BlankFragment_kind(分类页面),你可以使用Bundle来实现。首先,在Activity中创建一个Bundle对象并将要传递的数值放入其中,然后通过调用Fragment的setArguments()方法来传递Bundle。在Fragment中,你可以通过getArguments()方法获取到传递的Bundle,并从中取出数值。

这是一个简单的示例代码:

在你的Activity中:

// 创建并设置Bundle
Bundle bundle = new Bundle();
bundle.putString("key", "value");

// 实例化Fragment
BlankFragment_kind fragment = new BlankFragment_kind();
fragment.setArguments(bundle);

// 使用FragmentManager将Fragment添加到布局中
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.fragment_container, fragment);
fragmentTransaction.commit();

在你的Fragment中:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    // 获取传递的Bundle
    Bundle bundle = getArguments();
    if (bundle != null) {
        // 从Bundle中获取你传递的数值
        String value = bundle.getString("key");
        // 在这里处理数值
    }

    // 其他代码
}

这样就可以在Activity和Fragment之间传递数值了。请注意,你需要根据自己的具体情况调整代码。

【相关推荐】



  • 这篇博客: Android中Activity向Fragment传递数据1.Bundle2.定义方法中的 BlankFragment 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
    package com.example.zhangyu.myapplication;
    
    
    import android.content.Context;
    import android.os.Bundle;
    import android.support.v4.app.Fragment;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.TextView;
    
    
    /**
     * A simple {@link Fragment} subclass.
     */
    public class BlankFragment extends Fragment {
    
        private TextView tvTest;
    
        public BlankFragment() {
            // Required empty public constructor
        }
    
    
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                 Bundle savedInstanceState) {
            // Inflate the layout for this fragment
            View view = inflater.inflate(R.layout.fragment_blank, container, false);
            tvTest = view.findViewById(R.id.tv_test);
            return view;
        }
    
        String data;
        @Override
        public void onAttach(Context context) {
            super.onAttach(context);
            //2.通过Activity中的public方法来传值
            data = ((MainActivity) context).getData();
        }
    
        @Override
        public void onStart() {
            super.onStart();
            if (isAdded()) {
                //1.通过Bundle来传值
                final String s = getArguments().getString("key");
                tvTest.append("\n" + s);
                //2.通过Activity中的public方法来传值
                tvTest.append("\n" + data);
            }
        }
    
    }
    
    

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^