[英]Set Text not showing from a function inside a fragment
我是新手。 我的片段有3個面。 在我的登錄活動中,它通過sharedpreference傳遞所有數據。 當我進入片段首頁時,它將按共享首選項顯示數據。 在片段的另一部分是編輯配置文件。 它必須檢索我擁有的數據並放入設置的文本中。
這是我的SideProfileFragment
public class SideProfileFragment extends Fragment{
private static final String TAG = SideProfileFragment.class.getSimpleName();
public EditText name, birthDate, address, occupation, gender, number;
SessionManager sessionManager;
String getId;
private static String URL_READ = "http://isalonbyageeks.000webhostapp.com/readDetail.php";
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_sideprofile, container, false);
return view;
}
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
sessionManager = new SessionManager(getActivity());
sessionManager.checkLogin();
name = (EditText) getActivity().findViewById(R.id.userName);
birthDate = (EditText) getActivity().findViewById(R.id.userBirthDate);
address = (EditText) getActivity().findViewById(R.id.userAddress);
occupation = (EditText) getActivity().findViewById(R.id.userOccupation);
gender = (EditText) getActivity().findViewById(R.id.userGender);
number = (EditText) getActivity().findViewById(R.id.userNumber);
HashMap<String, String> user = sessionManager.getUserDetail();
getId = user.get(sessionManager.ID);
}
private void getUserDetail(){
final ProgressDialog progressDialog = new ProgressDialog(getActivity());
progressDialog.setMessage("Loadingws...");
progressDialog.show();
StringRequest stringRequest = new StringRequest(Request.Method.POST, URL_READ,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
progressDialog.dismiss();
Log.i(TAG, response);
try {
JSONObject jsonObject = new JSONObject(response);
String success = jsonObject.getString("success");
JSONArray jsonArray = jsonObject.getJSONArray("read");
if(success.equals("1")){
for(int i = 0; 1 < jsonArray.length();i++){
JSONObject object = jsonArray.getJSONObject(i);
String strName = object.getString ("name");
String strNumber = object.getString("phone_number");
String strGender = object.getString("gender");
String strAddress = object.getString("address");
String strOccupation = object.getString("occupation");
String strBirthDate = object.getString("birth_date");
name.setText(strName);
birthDate.setText(strBirthDate);
address.setText(strAddress);
number.setText(strNumber);
gender.setText(strGender);
occupation.setText(strOccupation);
}
}
} catch (JSONException e) {
e.printStackTrace();
progressDialog.dismiss();
Toast.makeText(getActivity(),"Error Reading Detail" +e.toString(), Toast.LENGTH_LONG).show();
}
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
progressDialog.dismiss();
Toast.makeText(getActivity(),"Error Reading Detail" +error.toString(), Toast.LENGTH_LONG).show();
}
})
{
@Override
protected Map<String, String> getParams() throws AuthFailureError{
Map<String, String> params = new HashMap<>();
params.put("id", getId);
return super.getParams();
}
};
RequestQueue requestQueue = Volley.newRequestQueue(getActivity());
requestQueue.add(stringRequest);
}
@Override
public void onResume(){
super.onResume();
getUserDetail();
}
}
我嘗試在創建的視圖中使用示例“文本”設置文本,並且它可以正常工作。 但是,當我將設置的文本放入函數getUserDetails中時,它什么也沒做,我的側邊配置文件僅顯示空白的編輯文本。
PS我試圖將示例文本放入函數的設置文本中,但仍然沒有任何結果。
這是我擁有的sideprofilefragment的XML代碼。 一切似乎都很好!
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/black"
xmlns:app="http://schemas.android.com/apk/res-auto">
<de.hdodenhof.circleimageview.CircleImageView
android:id="@+id/settingImageEdit"
android:layout_width="120dp"
android:layout_height="120dp"
android:layout_centerHorizontal="true"
android:layout_marginTop="30dp"
android:src="@drawable/defaultpic"/>
<TextView
android:id="@+id/editProfilePicture"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/settingImageEdit"
android:layout_marginTop="7dp"
android:text="Edit Photo"
android:layout_centerHorizontal="true"
android:textColor="@color/white"
android:textSize="12sp" />
<AutoCompleteTextView
android:id="@+id/userName"
android:layout_width="300dp"
android:layout_height="35dp"
android:layout_below="@+id/editProfilePicture"
android:layout_centerHorizontal="true"
android:layout_marginTop="10dp"
android:background="@drawable/rounded_white"
android:drawableLeft="@drawable/ic_user_icon"
android:drawablePadding="5dp"
android:hint="Email/Username"
android:paddingStart="10dp"
android:paddingLeft="10dp"
android:textSize="14sp" />
<AutoCompleteTextView
android:id="@+id/userNumber"
android:layout_width="300dp"
android:layout_height="35dp"
android:layout_below="@+id/userName"
android:layout_marginTop="8dp"
android:layout_centerHorizontal="true"
android:background="@drawable/rounded_white"
android:drawableLeft="@drawable/ic_phone"
android:drawablePadding="5dp"
android:hint="Phone Number"
android:inputType="number"
android:paddingStart="10dp"
android:paddingLeft="10dp"
android:textSize="14sp" />
<AutoCompleteTextView
android:id="@+id/userOccupation"
android:layout_width="300dp"
android:layout_height="35dp"
android:layout_below="@+id/userNumber"
android:layout_marginTop="8dp"
android:layout_centerHorizontal="true"
android:background="@drawable/rounded_white"
android:drawableLeft="@drawable/ic_occupation"
android:drawablePadding="5dp"
android:hint="Occupation"
android:paddingStart="10dp"
android:paddingLeft="10dp"
android:textSize="14sp" />
<AutoCompleteTextView
android:id="@+id/userAddress"
android:layout_width="300dp"
android:layout_height="35dp"
android:layout_below="@+id/userOccupation"
android:layout_marginTop="8dp"
android:background="@drawable/rounded_white"
android:drawableLeft="@drawable/ic_address"
android:layout_centerHorizontal="true"
android:drawablePadding="5dp"
android:hint="Address"
android:paddingStart="10dp"
android:paddingLeft="10dp"
android:textSize="14sp"
tools:ignore="RtlSymmetry" />
<AutoCompleteTextView
android:id="@+id/userGender"
android:layout_width="150dp"
android:layout_height="35dp"
android:layout_below="@+id/userAddress"
android:layout_alignStart="@+id/userName"
android:layout_alignLeft="@+id/userName"
android:layout_marginStart="0dp"
android:layout_marginLeft="0dp"
android:layout_marginTop="8dp"
android:background="@drawable/rounded_white"
android:drawableLeft="@drawable/ic_gender"
android:drawablePadding="5dp"
android:hint="Gender"
android:paddingStart="10dp"
android:paddingLeft="10dp"
android:textSize="14sp" />
<EditText
android:id="@+id/userBirthDate"
android:layout_width="170dp"
android:layout_height="34dp"
android:layout_below="@+id/userGender"
android:layout_alignStart="@+id/userGender"
android:layout_alignLeft="@+id/userGender"
android:layout_marginStart="0dp"
android:layout_marginLeft="0dp"
android:layout_marginTop="8dp"
android:background="@drawable/rounded_white"
android:drawableLeft="@drawable/ic_calendar"
android:drawablePadding="5dp"
android:ems="10"
android:hint="Tap to set Birthdate"
android:inputType="date"
android:paddingLeft="5dp"
android:textSize="14sp" />
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/userAddress"
android:layout_alignParentBottom="true"
android:layout_marginTop="101dp"
android:layout_centerHorizontal="true"
android:layout_marginBottom="70dp"
android:text="Save Edit" />
</RelativeLayout>
我真正需要更改什么? 我試圖把
name.setText("sample");
在onviewcreated內部,它起作用了。 但是當在功能,它沒有。
將所有getActivity().findViewById()
替換為view.findViewById()
name = (EditText) view.findViewById(R.id.userName);
替換所有視圖
另外,當您從http請求收到結果時,您需要在UI線程上運行UI操作。 例如:
getActivity().runOnUiThread(new Runnable() {
progressDialog.dismiss();
Log.i(TAG, response);
try {
JSONObject jsonObject = new JSONObject(response);
String success = jsonObject.getString("success");
JSONArray jsonArray = jsonObject.getJSONArray("read");
if(success.equals("1")){
for(int i = 0; 1 < jsonArray.length();i++){
JSONObject object = jsonArray.getJSONObject(i);
String strName = object.getString ("name");
String strNumber = object.getString("phone_number");
String strGender = object.getString("gender");
String strAddress = object.getString("address");
String strOccupation = object.getString("occupation");
String strBirthDate = object.getString("birth_date");
name.setText(strName);
birthDate.setText(strBirthDate);
address.setText(strAddress);
number.setText(strNumber);
gender.setText(strGender);
occupation.setText(strOccupation);
}
}
} catch (JSONException e) {
e.printStackTrace();
progressDialog.dismiss();
Toast.makeText(getActivity(),"Error Reading Detail" +e.toString(), Toast.LENGTH_LONG).show();
}
}
});
您的視圖將包含在傳入的視圖中
onViewCreated(View view, @Nullable Bundle savedInstanceState)
而不是您的活動,因此您需要使用它來引用變量。
name = (EditText) view.findViewById(R.id.userName);
對於所有視圖,如上更改。
1)將所有getActivity().findViewById()
)替換為view.findViewById()
2)您需要在另一個線程中處理UI的設置
try {
Handler uiHandler = new Handler(Looper.getMainLooper());
uiHandler.post(new Runnable() {
@Override
public void run() {
name.setText(strName);
birthDate.setText(strBirthDate);
address.setText(strAddress);
number.setText(strNumber);
gender.setText(strGender);
occupation.setText(strOccupation);
}
});
} catch (Exception e) {
Log.i("bugs", e.getMessage());
e.printStackTrace();
}
3)如果問題仍然存在,請將android:layout_height="match_parent"
分配給所有TextViews和EditTexts
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.