我有一个带有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个片段
答案 0 :(得分:0)
以下是您可以做的事情:
getActivity()
获取对textview的引用。下面的内容可行:
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,也可以设置接口以与父活动进行通信。如果您想要第二种(界面)方法,请告诉我。
更新:
好的,我将逐步指导您完成此设计:
在片段中声明TextView
就像对EditText
一样。所以类似于private TextView textView;
接下来,在片段中的onCreate()
中初始化textView,就像我上面发布的代码一样。
现在,您EditText
在哪里参加?好吧,它用于从用户那里获取文本。您将使用在EditText
中输入的文字用户来设置textView
。如下所示:
String newText = editText.getText().toString();
textView.setText(newText);
所以你现在已经开始工作了,是的,你需要为所有按钮做同样的事情。你能做的就是编写一个为你完成工作的方法,然后传递你想要的按钮:
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);
等等。