したがって、他の相対レイアウトを含む相対レイアウトがあります。子レイアウトには、JSON オブジェクト (キー/値と、子キー/値オブジェクトを持つ子 JSON 配列がある) から解析しているさまざまな情報が含まれています。ユーザーは、詳細フラグメントを表示するリスト フラグメントを介して各ルート JSON オブジェクトに移動します。ルートの詳細情報 (名前、画像、説明など) がよく表示されます。
階層:
委員会:
- 名前
- 画像
- 説明
- メンバー: オブジェクトの JSON 配列
メンバー: - 名前 - 状態 - 画像
レイアウトファイルは次のとおりです。
<code>
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:scrollbars="vertical"
android:fillViewport="false"
android:layout_gravity="top"
android:layout_marginBottom="60dp" >
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/frmCommitteeDetail"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/bg" >
<!-- Logo and Title Container -->
<RelativeLayout
android:id="@+id/frmImage_Title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="top|center_horizontal">"
<!-- Committee Logo -->
<ImageView
android:id="@+id/imgCommitteeLogo"
android:contentDescription="@string/content_description"
android:layout_width="96dp"
android:layout_height="90dp"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_marginLeft="5dp"
android:layout_marginTop="26dp"
android:src="@drawable/default_comm"
android:background="@drawable/rounded_corners"
android:padding="4dp" />
<TextView
android:id="@+id/txtCommitteeName"
android:layout_width="200dp"
android:layout_height="wrap_content"
android:layout_alignTop="@+id/imgCommitteeLogo"
android:layout_marginTop="14dp"
android:layout_marginLeft="8dp"
android:layout_toRightOf="@+id/imgCommitteeLogo"
android:background="@drawable/rounded_corners"
android:gravity="center_horizontal|center_vertical"
android:textAppearance="?android:attr/textAppearanceLarge"
android:textSize="20sp" />
</RelativeLayout>
<!-- Description -->
<RelativeLayout
android:id="@+id/frmComDescription"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="25dp"
android:layout_marginLeft="20dp"
android:layout_marginRight="20dp"
android:paddingTop="10dp"
android:paddingBottom="10dp"
android:layout_below="@id/frmImage_Title"
android:background="@drawable/rounded_corners"
android:gravity="center_horizontal">
<!-- Webview to have proper text layout -->
<WebView
android:id="@+id/txtComDescription"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</RelativeLayout>
<!-- Contact Infomation -->
<RelativeLayout
android:id="@+id/frmComContact"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="25dp"
android:layout_marginLeft="20dp"
android:layout_marginRight="20dp"
android:paddingBottom="20dp"
android:layout_below="@id/frmComDescription"
android:background="@drawable/rounded_corners"
android:gravity="center_horizontal">
<!-- Contact Title -->
<TextView
android:id="@+id/txtComContactTitle"
android:layout_marginTop="10dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="top|center_horizontal"
android:text="@string/contact_info"
android:textAppearance="?android:attr/textAppearanceLarge" />
<!-- Separator -->
<ImageView
android:contentDescription="@string/content_description"
android:id="@+id/imgLineComContactTitle"
android:src="@drawable/cell_divider_line"
android:layout_below="@id/txtComContactTitle"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<!-- URL -->
<TextView
android:id="@+id/txtComContactURL"
android:layout_marginTop="10dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/imgLineComContactTitle"
android:gravity="center_horizontal"
android:textSize="14sp"
android:text="www.gooogle.com/url/url/link"/>
<!-- Email -->
<TextView
android:id="@+id/txtComContactEmail"
android:layout_marginTop="10dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/txtComContactURL"
android:gravity="center_horizontal"
android:textSize="14sp"
android:text="comemail@comsemail.com"/>
<!-- Name -->
<TextView
android:id="@+id/txtComContactName"
android:layout_marginTop="10dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/txtComContactEmail"
android:gravity="center_horizontal"
android:textSize="14sp"
android:text="John McGee, Contact Guy"/>
<!-- Number -->
<TextView
android:id="@+id/txtComContactNumber"
android:layout_marginTop="10dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/txtComContactName"
android:gravity="center_horizontal"
android:textSize="14sp"
android:text="(888)-777-1234"/>
<!-- Address -->
<TextView
android:id="@+id/txtComContactAddress"
android:layout_marginTop="10dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/txtComContactNumber"
android:gravity="center_horizontal"
android:textSize="14sp"
android:text="08 War Memorial Bldg"/>
</RelativeLayout>
<!-- Members -->
<RelativeLayout
android:id="@+id/frmComMemberList"
android:layout_below="@id/frmComContact"
android:layout_marginLeft="20dp"
android:layout_marginRight="20dp"
android:layout_marginTop="10dp"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:background="@drawable/rounded_corners">
</RelativeLayout>
</RelativeLayout>
</ScrollView>
</code>
現在のフラグメントは次のとおりです。
<code>
package v4dev.android.general_assembly.fragment;
import v4dev.android.general_assembly.R;
import v4dev.android.general_assembly.model.CommitteeModel;
import v4dev.android.general_assembly.model.CommitteeModel.Member;
import android.annotation.SuppressLint;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.WebView;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;
@SuppressLint("ValidFragment")
public class CommitteeDetailFragment extends Fragment
{
private CommitteeModel Committee = new CommitteeModel();
@SuppressLint("ValidFragment")
public CommitteeDetailFragment(CommitteeModel committee)
{
this.Committee = committee;
}
// Create View
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
View view = inflater.inflate(v4dev.android.general_assembly.R.layout.com_detail, container, false);
ImageView imgLogo = (ImageView) view.findViewById(R.id.imgCommitteeLogo);
TextView txtCommitteeName = (TextView) view.findViewById(R.id.txtCommitteeName);
imgLogo.setImageResource(this.Committee.imageID);
txtCommitteeName.setText(this.Committee.name);
createDescription(view);
createContactInfo(view);
createMembers(view, container);
return view;
}// End onCreateView
// Description
public void createDescription(View view)
{
// Using a web view since its near impossible to get justified indented text with a native TextView
// Text View
WebView txtComDescription = (WebView)view.findViewById(R.id.txtComDescription);
// Fill or collapse
if(!(this.Committee.description.length()==0))
{
String Description = "<html><body><p align=\"justify\" style=\"text-indent: 25px\">";
Description += this.Committee.description;
Description += "</p></body></html>";
//txtComDescription.setText(this.Committee.description);
txtComDescription.loadData(Description,"text/html", "utf-8");
}
else
{
txtComDescription.setVisibility(View.GONE);
}
}
// Contact Info
public void createContactInfo(View view)
{
// Text Views
TextView txtComContactURL = (TextView)view.findViewById(R.id.txtComContactURL);
TextView txtComContactEmail = (TextView)view.findViewById(R.id.txtComContactEmail);
TextView txtComContactName = (TextView)view.findViewById(R.id.txtComContactName);
TextView txtComContactNumber = (TextView)view.findViewById(R.id.txtComContactNumber);
TextView txtComContactAddress = (TextView)view.findViewById(R.id.txtComContactAddress);
// Fill Data into Layout
// Collapse Layout if not existent
// url
if(!(this.Committee.url.length() == 0))
{
txtComContactURL.setText(this.Committee.url);
}
else
{
txtComContactURL.setVisibility(View.GONE);
}
// contact_email
if(!(this.Committee.contact_email.length() == 0))
{
txtComContactEmail.setText(this.Committee.contact_email);
}
else
{
txtComContactEmail.setVisibility(View.GONE);
}
// contact_name
if(!(this.Committee.contact_name.length() == 0))
{
txtComContactName.setText(this.Committee.contact_name);
}
else
{
txtComContactName.setVisibility(View.GONE);
}
// contact_number
if(!(this.Committee.contact_number.length() == 0))
{
txtComContactNumber.setText(this.Committee.contact_number);
}
else
{
txtComContactNumber.setVisibility(View.GONE);
}
// contact_address
if(!(this.Committee.contact_address.length() == 0))
{
txtComContactAddress.setText(this.Committee.contact_address);
}
else
{
txtComContactAddress.setVisibility(View.GONE);
}
}// end CreateContactInfo()
// Display all Committee Members
public void createMembers(View view, ViewGroup container)
{
RelativeLayout frmComMemberList = (RelativeLayout) view.findViewById(R.id.frmComMemberList);
RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
int id = 1;
for(Member member: this.Committee.MemberList)
{
ImageView imgMember = new ImageView(container.getContext());
imgMember.setAdjustViewBounds(true);
imgMember.setMaxHeight(60);
imgMember.setMaxWidth(60);
imgMember.setId(id);
imgMember.setImageResource(member.imageID);
imgMember.setLayoutParams(lp);
if(id > 1)
{
lp.addRule(RelativeLayout.BELOW, imgMember.getId() );
frmComMemberList.addView(imgMember,lp);
}
else
{
frmComMemberList.addView(imgMember);
}
id++;
}// EndFor
}
}
</code>
相対レイアウト パラメータを使用して、メンバを動的に「スタック」しようとしています。問題は、フラグメントで作成された新しいビューの ID が実行時に生成されることです。リストビューであるかのようにそれらを「スタック」することは可能ですか、それとも実際のリストビュー/アダプターのコンボを使用して別のルートに行く方が良いでしょうか、それともあえて言うなら...テーブルビューですか?
よろしくお願いします。:)