2017-06-20 116 views
-1

我想根據從數據庫接收到的信息在我的應用程序中動態添加文本視圖。我正在引用線性佈局,然後在循環中實例化文本視圖,爲它們設置LayoutParams,然後將它們添加到佈局,所有這些都是在靜態內部片段類中完成的。我已經經歷了幾乎所有的解決方案,並且我和其他人做的一樣,但是當我在設備上運行我的應用程序時,我沒有看到動態添加的視圖。請幫我解決這個問題。 這裏是我的代碼的副本:通過Android中的java代碼動態添加文本視圖

public static class PlaceholderFragment extends Fragment { 
     /** 
     * The fragment argument representing the section number for this 
     * fragment. 
     */ 
     private static final String ARG_SECTION_NUMBER = "section_number"; 

     final int PICKFILE_RESULT_CODE = 1; 
     String FilePath=""; 
     UploadFileAsync u; 

     public PlaceholderFragment() { 
     } 

     /** 
     * Returns a new instance of this fragment for the given section 
     * number. 
     */ 
     public static PlaceholderFragment newInstance(int sectionNumber) { 
      PlaceholderFragment fragment = new PlaceholderFragment(); 
      Bundle args = new Bundle(); 
      args.putInt(ARG_SECTION_NUMBER, sectionNumber); 
      fragment.setArguments(args); 
      return fragment; 
     } 

     @Override 
     public View onCreateView(LayoutInflater inflater, ViewGroup container, 
           Bundle savedInstanceState) { 
      View rootView; 
//   TextView textView = (TextView) rootView.findViewById(R.id.section_label); 
//   textView.setText(getString(R.string.section_format, getArguments().getInt(ARG_SECTION_NUMBER))); 
      int sectionNumber = getArguments().getInt(ARG_SECTION_NUMBER); 
      switch (sectionNumber){ 
       case 1: rootView = inflater.inflate(R.layout.fragment_faculty_home_info, container, false); 
        facultyInfoFragment(rootView); 
        break; 
       case 2: rootView = inflater.inflate(R.layout.fragment_faculty_home_exam, container, false); 
        facultyExamFragment(rootView); 
        break; 
       case 3: rootView = inflater.inflate(R.layout.fragment_faculty_home_info, container, false); 
        facultyEventsFragment(rootView); 
        break; 
       default: rootView = inflater.inflate(R.layout.fragment_faculty_home_info, container, false); 
      } 
      return rootView; 
     } 

     public void facultyInfoFragment(View rootView){ 

      TextView facultyInfoName = (TextView)rootView.findViewById(R.id.faculty_info_name_view); 
      facultyInfoName.setText("Ravi Singh"); 

      TextView facultyInfoID = (TextView)rootView.findViewById(R.id.faculty_info_ID_view); 
      facultyInfoID.setText("12345"); 

      TextView facultyInfoDept = (TextView)rootView.findViewById(R.id.faculty_info_dept_view); 
      facultyInfoDept.setText("CSE"); 

      Button facultyInfoCaddButton = (Button)rootView.findViewById(R.id.faculty_info_cADD_button); 
      Button facultyInfoCdeleteButton = (Button)rootView.findViewById(R.id.faculty_info_cDelete_button); 

      EditText facultyInfoCIDField = (EditText)rootView.findViewById(R.id.faculty_info_cID_field); 
      EditText facultyInfoCnameField = (EditText)rootView.findViewById(R.id.faculty_info_cname_field); 

      if (facultyInfoCIDField.getText().toString() != null && facultyInfoCnameField.getText().toString() != null){ 
       facultyInfoCaddButton.setEnabled(true); 
       facultyInfoCdeleteButton.setEnabled(true); 
      } 
      else{ 
       facultyInfoCaddButton.setEnabled(false); 
       facultyInfoCdeleteButton.setEnabled(false); 
      } 

      facultyInfoCaddButton.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 

       } 
      }); 

      facultyInfoCdeleteButton.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 

       } 
      }); 
// this is the part where I dynamically try to add views 
      LinearLayout facultyInfoLayout = (LinearLayout)rootView.findViewById(R.id.faculty_info_layout); 
      int numberOfCourses = super.getArguments().getInt(SignupActivity.courses);// no. of courses returned from database 
      TextView coursesTextView[] = new TextView[numberOfCourses]; 
      for (int i = 0; i < numberOfCourses; i++){ 
       coursesTextView[i] = new TextView(getContext()); 
       coursesTextView[i].setText("CSE1212 RDBMS"); //enter the course ID and course name returned from database 
       coursesTextView[i].setLayoutParams(new LinearLayoutCompat.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT)); 
       facultyInfoLayout.addView(coursesTextView[i]); 
      } 

      return; 
     } 

     public void facultyExamFragment(View rootView){ 

      Button uploadExamScheduleButton = (Button)rootView.findViewById(R.id.faculty_exam_upload_button); 
      uploadExamScheduleButton.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        Intent intent = new Intent(); 
        intent.setAction(Intent.ACTION_OPEN_DOCUMENT); 
        intent.setType("*/*"); 
        startActivityForResult(intent,PICKFILE_RESULT_CODE); 
       } 
      }); 
     } 

     @Override 
     public void onActivityResult(int requestCode, int resultCode, Intent data) { 

      switch(requestCode){ 
       case PICKFILE_RESULT_CODE: 
        if(resultCode==RESULT_OK){ 

         FilePath = data.getData().getPath(); 
         FilePath=FilePath.split(":")[1]; 
         u=new UploadFileAsync(FilePath); 
         u.execute(""); 
        } 
        break; 
      } 
     } 

     public static void facultyEventsFragment(View rootView){ 

     } 
    } 
+0

有你檢查'numberOfCourses'返回有效的數字。意味着是否爲零。 – Dharmishtha

+0

@Dharmishtha yea ...實際上我已經硬編碼該號碼進行測試,因爲那時我沒有連接服務器連接 –

回答

0

設定方向爲你的父母的LinearLayout到要添加的textviews。

LinearLayout facultyInfoLayout = (LinearLayout)rootView.findViewById(R.id.faculty_info_layout); 
facultyInfoLayout.setOrientation(LinearLayout.VERTICAL); 
+0

方向已經在佈局文件中設置,並且我也將它添加到了java代碼中,正如您所說的那樣還是行不通。 –

0

刪除LinearLayoutCompact,而不是在佈局只使用LinearLayout PARAMS

coursesTextView[i].setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT)); 
+0

這是否也...沒有工作 –

0

這是我的XML部分

<LinearLayout 
      android:layout_width="match_parent" 
      android:id="@+id/parent" 
      android:layout_height="wrap_content" 
      android:orientation="vertical"> 

這是我的Java部分

LinearLayout parent = (LinearLayout) findViewById(R.id.parent); 
     TextView coursesTextView[] = new TextView[5]; 
     for (int i = 0; i < 5; i++){ 
      coursesTextView[i] = new TextView(this); 
      coursesTextView[i].setText("CSE1212 RDBMS"); //enter the course ID and course name returned from database 
      coursesTextView[i].setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT)); 
      parent.addView(coursesTextView[i]); 
     } 

而且這增加了5個textviews一個在另一個

0

改變之後此線

coursesTextView[i].setLayoutParams(new LinearLayoutCompat.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT)); 

到。可能是問題。並且還設置了文本顏色,可能是同一種顏色不顯示textview。

tv.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT)); 
    tv.setTextColor(mHostActivity.getResources().getColor(R.color.orange));