我有Activity
开始Fragmen
t。在那个片段里面我有一个EditText
。当我收到用户在那里输入的文字时,我希望在Activity
的帮助下从interface
获取该文字。我正在使用this guide
在MainActivity
我正在实施commentListener interfac
e,我设法将结果放在 onCommentEntered
方法中。但是在 doneListener
上,当用户按下完成活动的按钮时触发,我将变为空。
显然onCommentEntered
会在doneListener
之后运行。
有关如何在doneListener
上获得结果的任何建议?
class MainActivity implements fragment.commentListener{
static String comment;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.addtransaction);
done=(TextView)findViewById(R.id.done_button);
}
// called when user presses a button and MainActivity finishes.
public void doneListener(View v){
// Here i get NULL
System.out.println(comment);
finish();
}
@Override
public void onCommentEntered(String data) {
comment=data;
// Here i get what the user typed
System.out.println(comment);
}
}
我的片段
public class thefragment extends Fragment {
commentListener cListener;
static TextView note;
EditText comment;
public interface commentListener{
void onCommentEntered(String data);
}
public static thefragment newInstance(){
return new thefragment ();
}
public thefragment (){
}
@Override
public void onAttach(Context context) {
super.onAttach(context);
cListener=(commentListener) context;
}
@Override
public void onDetach() {
super.onDetach();
cListener=null;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v;
v=inflater.inflate(R.layout.fragment, container, false);
comment=(EditText)v.findViewById(R.id.comment_picker);
comment.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (!hasFocus) {
cListener.onCommentEntered(comment.getText().toString());
}
}
});
return v;
}
}
答案 0 :(得分:0)
创建一个新的接口,并在Fragment中实现它。在接口中创建一个方法并在Fragments中覆盖它。从Activity调用片段时,创建一个Interface类型片段并调用接口方法。
例如:
public class thefragment extends Fragment implement fragmentNofyInterface {
...
@Override
protected void notify(String txt){
mTvTxt.setText(txt);
}
.....
}
Interface Format
public interface fragmentNofyInterface {
protected void notify(String txt);
}
活动格式
class MainActivity implements fragment.commentListener{
.....
private fragmentNofyInterface mFragmentNotifier;
.........
thefragment mFragment = new thefragment();
mFragmentNotifier = (fragmentNofyInterface ) mFragment;
FragmentTransaction transaction = mFragmentMngr.beginTransaction().
add(R.id.rl_fragment_navigation_container,
mFragment);
transaction .commit();
......
//Notify the fragment when you required
mFragmentNotifier.notify("hello world");
}
答案 1 :(得分:0)
切换到addTextChangedListener
的{{1}}和TextWatcher
,例如this here,
似乎解决了我的问题。在EditText
之前调用现在onCommentEntered
方法,因此String doneListener
获取在EditText中输入的任何内容。感谢所有人的帮助。