Tol*_*lar 5 android android-fragments
我正在使用片段,我在片段中有一个编辑文本,我想在主要活动中获得价值。
\n\n这是我的片段布局
\n\n<?xml version="1.0" encoding="utf-8"?>\n<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"\n android:layout_width="match_parent"\n android:layout_height="match_parent"\n android:orientation="vertical"\n android:background="#878787" >\n\n <TextView android:layout_width="fill_parent"\n android:layout_height="wrap_content"\n android:gravity="center"\n android:text="dfgdfgdf"\n android:textSize="20dp"\n android:layout_centerInParent="true"\n android:id="@+id/user_name"/>\n\n <EditText\n android:id="@+id/message"\n android:layout_width="fill_parent"\n android:layout_height="wrap_content"\n />\n\n <Button \n android:text="G\xc3\xb6nder"\n android:layout_width="fill_parent"\n android:layout_height="wrap_content"\n android:onClick="getFromUser"\n android:layout_marginTop="40dp"\n />\n\n</RelativeLayout>\n
Run Code Online (Sandbox Code Playgroud)\n\n我正在使用此函数加载片段:
\n\npublic void startChat(JsonObject user) {\n FrameLayout layout = (FrameLayout)findViewById(R.id.container);\n layout.setVisibility(View.VISIBLE); \n Bundle bundle = new Bundle();\n bundle.putString("name", user.get("name").getAsString());\n sendTo=user.get("username").getAsString();\n FragmentManager fragmentManager = getSupportFragmentManager();\n FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();\n ConversationFragment conv = new ConversationFragment();\n conv.setArguments(bundle);\n fragmentTransaction.add(R.id.container, conv);\n fragmentTransaction.commit();\n viewPager.setVisibility(View.GONE);\n actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);\n actionBar.setDisplayHomeAsUpEnabled(true);\n\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n这是我的片段类
\n\npublic class ConversationFragment extends Fragment {\n @Override\n public View onCreateView(LayoutInflater inflater, ViewGroup container,\n Bundle savedInstanceState) {\n String name = getArguments().getString("name");\n View rootView = inflater.inflate(R.layout.fragment_conversation, container, false);\n TextView username=(TextView)rootView.findViewById(R.id.user_name);\n username.setText(name);\n return rootView;\n }\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n正如您所看到的,当按下按钮时,主活动运行“getFromUser”函数。我想在此函数中获取 edittext 值。我该如何执行此操作?
\n这些事情的程序总是相同的。您无法像这样访问片段的视图。您需要一个回调方法。
将此代码添加到ConversationFragment:
private OnGetFromUserClickListener mListener;
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
try {
mListener = (OnGetFromUserClickListener ) activity;
} catch (ClassCastException e) {
throw new ClassCastException(activity.toString() + " must implement OnGetFromUserClickListener");
}
}
public void getFromUser(View v) {
if (mListener != null) {
EditText edit = (EditText)findViewById(R.id.message);
mListener.getFromUser(edit.getText().toString());
}
}
public interface OnGetFromUserClickListener {
void getFromUser(String message);
}
Run Code Online (Sandbox Code Playgroud)
让您的 MainActivity 实现此接口。将MainActivity 中的getFromUser() 替换为:
public void getFromUser(String message) {
sendMessage(message);
}
Run Code Online (Sandbox Code Playgroud)
完毕。
编辑:实际上,使用 XML-onClick 属性当前存在错误(请参阅onClick 在 Activity 上调用的片段内):它链接到活动而不是片段。您必须以编程方式设置点击侦听器,以确保代码在将来的某个时刻不会中断。因此,在 XML 中为按钮提供一个 ID(例如 get_from_user),并将以下代码添加到ConversationFragment 内的 onCreateView 中:
v.findViewById(R.id.get_from_user).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (v.getId() == R.id.get_from_user) {
getFromUser(v);
}
}
});
Run Code Online (Sandbox Code Playgroud)
使用此代码可以极大地解耦活动和片段。
归档时间: |
|
查看次数: |
27971 次 |
最近记录: |