簡體   English   中英

設置文本不從片段內的函數顯示

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM