Android:根据每个侦听器触发更改对话框的内容

时间:2016-04-03 03:42:53

标签: java android android-fragments fragment

我有一个带有5个按钮的活动,每个按钮都有一个TextView,我想显示一个"设置" onLong之后的Dialog Fragment用于允许用户更改其相应TextView的每个按钮。 这就是我在每个onLongClick上调用片段的方式:

fm = getFragmentManager();
myFragment = new Fragment_Edit();

FirstButton.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View v) {
                myFragment.show(fm, "theFragment");
                return false;
        }
});

Fragment有一个EditText,一个Button和默认代码。 我需要单击FirstButton以在第一个Button下更改TextView时出现的对话框的EditText;当我单击第三个按钮以更改第三个按钮下的TextView时出现的对话框的EditText,您得到了这一点。欢迎详细解释。

编辑:无需创建5个片段

1 个答案:

答案 0 :(得分:0)

以下是您可以做的事情:

  1. 将textview的ID传递给您的片段
  2. 获取片段中的ID,然后通过getActivity()获取对textview的引用。
  3. 下面的内容可行:

    fm = getFragmentManager();
    myFragment = new Fragment_Edit();
    
    FirstButton.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View v) {
    
                // Pass the id of view to fragment
                Bundle data = new Bundle();
                data.putInt("id", v.getId());
                myFragment.setArgument(data);
    
                myFragment.show(fm, "theFragment");
                return false;
        }
    });
    

    然后在你片段的onCreate()中:

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    
        // Get the data
        if (getArguments() != null) {
    
            Bundle data = getArguments();
            int id = data.getInt("id");
    
            // Get the corresponding textview from parent activity
            textView = (TextView) getActivity().findViewById(id);
        }
    }
    

    您可以使用此方法设置父TextView,也可以设置接口以与父活动进行通信。如果您想要第二种(界面)方法,请告诉我。

    更新:

    好的,我将逐步指导您完成此设计:

    1. 在片段中声明TextView就像对EditText一样。所以类似于private TextView textView;

    2. 接下来,在片段中的onCreate()中初始化textView,就像我上面发布的代码一样。

    3. 现在,您EditText在哪里参加?好吧,它用于从用户那里获取文本。您将使用在EditText中输入的文字用户来设置textView。如下所示:

      String newText = editText.getText().toString();

      textView.setText(newText);

    4. 所以你现在已经开始工作了,是的,你需要为所有按钮做同样的事情。你能做的就是编写一个为你完成工作的方法,然后传递你想要的按钮:

      private void addOnClickListener(Button button, myFragment) {
          button.setOnLongClickListener(new View.OnLongClickListener() {
              @Override
              public boolean onLongClick(View v) {
      
                  // Pass the id of view to fragment
                  Bundle data = new Bundle();
                  data.putInt("id", v.getId());
                  myFragment.setArgument(data);
      
                  myFragment.show(fm, "theFragment");
                  return false;
          }
      });
      

      然后就这样做:

      addOnClickListener(FirstButton, myFragment);
      addOnClickListener(SecondButton, myFragment);
      

      等等。