当前位置: 首页 > 知识库问答 >
问题:

如何从父活动以编程方式更改片段视图

司徒经纶
2023-03-14

我有一个包含例如一个按钮的片段,我想允许包含该片段的活动更改此按钮视图,例如颜色和标题或src图像。最好的方法是什么?

更新:如果我不够清楚,很抱歉,但我希望活动可以随心所欲地更改整个视图,比如设置填充、颜色或任何东西。它将以编程方式创建视图,片段应该用新视图替换旧视图,并更改视图的ID,以便片段代码不受影响。如果我在片段中创建了获取这些视图的方法,那么主活动应该在什么时候调用它们?因为活动必须等待创建片段的布局。

共有2个答案

乐正浩宕
2023-03-14

根据您的要求尝试这种方式

public abstract class BaseFragment extends Fragment {
    BaseActivity yourActivity;
    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

   @Override
   public void onAttach(Context context) {
       super.onAttach(context);
      yourActivity = (BaseActivity) context;
   }

   @Override
   public void onDetach() {
       yourActivity = null;
       super.onDetach();
    }


    public void refreshview(){} 

    public void setDada(Data data){}


    @override
    publicn void onStart(){
        yourActivity.setCurrentOpenedFragment(this);
    }
}

创建BaseActivity类

public abstract class BaseActivity extends AppCompatActivity{
   @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }
     public void setCurrentOpenedFragment(BaseFragment currentFragment){}
}

扩展您的片段中的Base片段,即。

public class YourFragment extends BaseFragment{
   View view;       
   Button button;
   @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {       
          view = inflater.inflate(R.layout.fragment, container, false);
          button = (Button)view.findViewById(R.id.button);
          return view;
    }

    @override
    publicn void onStart(){
      super.onStart();
      //yourActivity.setCurrentOpenedFragment(this);
   }

   Data data; 
   @override 
   public void setDada(Data data){
     this.data = data;
   } 
    @Override 
    public void refreshview() {
       button.setcolor(data.getcolor());
    }
} 

在活动类中编写以下代码行

public class YourActivity extends BaseActivity{

   public static final byte NONE =  -1;
   public static final byte HOME =  1;

   @Override
    protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
            setContentView(R.layout.your_activity);
            changeFragment(new YourFragment(), HOME);
            initview();
    }

   public void initview(){
        Button b = (Button)findViewById(R.id.button);
        b.setOnClickListener(new OnClickListener(){
          if(currentFragmentOnDrawer != null){

            Data data = new Data();
            data.setColor(getResource().getcolor(R.color.red));
            currentFragmentOnDrawer.setDada(data);

            currentFragmentOnDrawer.refreshview()

         }
       });
   }

   BaseFragment currentFragmentOnDrawer;
    @Override
    public void setCurrentOpenedFragment(BaseFragment currentFragment) {
        super.setCurrentOpenedFragment(currentFragment);
        this.currentFragmentOnDrawer = currentFragment;
    }

   public void changeFragment(Fragment targetFragment, byte state) {

      FragmentTransaction ft = getSupportFragmentManager()
            .beginTransaction();
      ft.replace(R.id.main_fragment, targetFragment, "" + state);
      ft.addToBackStack("" + state);
      ft.commit();
  }
}

希望对你有帮助

孟自强
2023-03-14

1.你必须从你的活动中获得碎片

val fragment = supportFragmentManager.findFragmentByTag("tag")

val fragment = supportFragmentManager.findFragmentById(R.id.fragment)

2

fragment.hideButton()

或者您可以使用界面

 类似资料:
  • 问题内容: 我想将自己更改为我尝试过的内容,但无法将我的活动更改为片段。有人可以告诉我该怎么做吗?在哪里编辑我是Android上的新手。请告诉我和在此先感谢 这是我的活动: 问题答案: 只要了解一些步骤,您就可以现在和将来轻松地将Activity转换为Fragment ..: 首先,不要扩展,只要扩展.. 例如: 然后覆盖.. 然后通过LayoutInflater扩展布局,并分配给进一步用于子视图

  • 情况: 比如说,我目前正在开展应用程序活动A。 过了一段时间,我按下了“主页”按钮。应用程序A进入后台 现在,我开始使用另一个应用程序B——例如youtube等。 在应用程序A中发生了一些事情(不管在这种情况下发生了什么,比方说计时器完成了计算时间),目前它被最小化到后台 事件发生时,应用程序A活动会自动从后台恢复 问题: 如何完成第5步?基本上,我需要知道如何以编程方式从后台恢复应用程序。 我试

  • 问题内容: 使用v7时,我发现无法设置字段值。现在,在我中,我有两个部分。当第一个组件值更改时,第二个值将清除。 在课堂上渲染: 现在,我添加了更改钩子,以及如何更改其他值 问题答案: 您可以使用onChange逻辑并使用redux-form中的操作 根据文档: change(field:String,value:any):函数 更改Redux存储中字段的值。这是绑定动作的创建者,因此不返回任何内

  • 问题内容: 我要在我的下一个Android项目中使用Retrofit 2.1.0。我想使用设计模式,因此为每个REST调用创建单独的类,即 IBalanceService.java BalanceRestClient.java BalanceActivity.java 如何通过onResponse()更新活动/片段中的UI? 附加信息: 最小SDK:19个 目标SDK:23个 使用OkHttp和g

  • 我找不到如何从< code>Activity更改fragment的< code>textview。我有4个文件: frag_class.xml有textView,我想更改MainActivity.java的文本。FragmentClass扩展了片段,此片段显示在MainActivity中,FragmentClass具有: 在MainActivity中,我尝试了这个: 但可悲的是,这段代码给了我Nu

  • //使用startActivity(intent)也不起作用//无论我做什么,应用程序都会崩溃