【问题标题】:get textview data from Mainactivity to fragment从 Mainactivity 获取 textview 数据到片段
【发布时间】:2021-07-04 12:01:47
【问题描述】:

我想获取 Textview 信息以分段 textview。

主要活动:

   public final DatePickerDialog.OnDateSetListener datePickerListener = new DatePickerDialog.OnDateSetListener() {
            @Override
            public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
                Calendar c = Calendar.getInstance();
                c.set(Calendar.YEAR, year);
                c.set(Calendar.MONTH, month);
                c.set(Calendar.DAY_OF_MONTH, dayOfMonth);
                String format = new SimpleDateFormat("dd/MM/yyyy").format(c.getTime());
                datePicker1.setText(format);
Tab1_fragment.getInstance().setText(Integer.toString(difference(c.getTimeInMillis())));
             
            }
        };

片段

public class Tab1_fragment extends Fragment {
        TextView betweendate;
        public void setText (String text){
            TextView betweendate = (TextView) this.getView().findViewById(R.id.betweenDate);
            betweendate.setText(text);
        }

我做得对吗? 日志中的结果是:

尝试调用虚拟方法'android.view.View android.view.View.findViewById(int)' 在空对象引用上

【问题讨论】:

  • 我可以知道为什么datePickerListener 不在 Fragment 中吗?
  • 您的代码不够清晰,无法提供帮助。不过,问题的标题是您试图将数据从活动MainActivity 传递到片段Fragment。请参阅此链接stackoverflow.com/a/12739968/9942927。希望它能解决你的问题。
  • @TicherhazFreePalestine 生成的数据必须处于 mainactivity 中,当我以片段 (3) 的形式获取这些数据时,还有一些额外的操作。
  • @4xMafole 谢谢,我会审核的

标签: java android android-studio textview fragment


【解决方案1】:

您首先在 onCreateView 中定义所有视图(文本视图和 ....)(在片段中) 他们的初始视图是示例:

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

    View view = inflater.inflate(R.layout.fragment_compare_result, container, false);
    initView(view);
    return view;


}
private void initView(View view) {
    txtProductName = view.findViewById(R.id.txt_product_name);
    txtProductc = view.findViewById(R.id.txt_product_c);
    txtProductn = view.findViewById(R.id.txt_product_n);

    }

要将活动中的数据发送到片段,您可以使用收缩片段来获取数据或意图

【讨论】:

    【解决方案2】:

    初学者的简单实现如下:

    您可以从片段中访问活动数据:

    Activity:
    
    public class YourActivity extends Activity {
    
        private String myString = "hello";
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_my);
            ...
        }
    
        public String getDataLocal() {
            return myString;
        }
    }
    
    Fragment:
    
    public class MyFragment extends Fragment {
        TextView tv;
    
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {=
    
            View view = inflater.inflate(R.layout.frgament_layout_view, container, false);
            tv = (TextView) view.findViewById(R.id.yout_text_view);
            
            return view;
        }
    
        @Override
        public View onViewCreated(..) {
    
            YourActivity activity = (YourActivity) getActivity();
            String myActivityData = activity.getDataLocal();
            tv.setText(myActivityData);
         
            return view;
        }
    }
    

    希望这能让您了解如何将数据从 Activity 发送到片段。


    第二种解决方案:来自YourActivity

    var fragment = supportFragmentManager.findFragmentById(YOUR_FRAG_ID) as MyFragment
    fragment.updateMyData(YOUR_NEW_DATA);
    

    尝试第二个解决方案,它应该可以工作。 :)

    【讨论】:

    • 做了这些步骤,但是在日志中返回:com.example.lifecalcv1.TabActivity cannot be cast to com.example.lifecalcv1.MainActivity
    • 更新了第二种解决方案。试试看。
    • 很遗憾,我没有明白代码的含义:) 必须更改哪些地方和哪些内容?
    • 点击某些操作,例如在您的案例中选择的日期。
    【解决方案3】:

    看起来你需要使用Bundle,假设我的Fragment叫做ResultFragment 例如,我想传递一个日期。

        String date = "10/12/2000";
    
        Bundle bundle = new Bundle();
        bundle.putString("date", date);
    
        ResultFragment resultFragment = new ResultFragment();
        resultFragment.setArguments(bundle);
        resultFragment.show(this.getSupportFragmentManager(), "result fragment");
    

    要获取 Fragment 中的数据,请使用以下代码。

     Bundle bundle = this.getArguments();
       
        if (bundle != null) {
    
            String date = bundle.getString("date", null);
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多