2017-06-20 113 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));