データベースから受け取った情報に応じて、アプリケーションにテキストビューを動的に追加したいと考えています。私は線形レイアウトへの参照をしてから、ループでテキストビューをインスタンス化し、LayoutParamsをそれらに設定してレイアウトに追加します。これはすべて静的内部フラグメントクラス内で行われます。私はほとんどすべてのソリューションを通過して、私は他の人と同じことをやっていますが、私はデバイス上で私のアプリケーションを実行すると、私は動的に追加されたビューが表示されません。この問題を解決するのを手伝ってください。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){
}
}
「numberOfCourses」が有効な数値を返すことを確認してください。ゼロがあるかどうかを意味します。 – Dharmishtha
@Dharmishtha yea ...実際には、私はサーバ接続をしなかったので、テスト用にその番号をハードコードしました。 –