私はAndroidが初めてです。現在、ExpandableListViewを使用して、最初にグループレベルで作業タイプをリストし、次に子レベルで作業項目をリストしようとしています。しかし、レイアウトfill_parentがgetChildViewメソッドで機能しないのは非常に奇妙です.wrap_contentのように動作し、関連するテキストビューの高さも、レイアウトに設定した内容に関係してログに記録すると0になり、テキストサイズを手動で設定しない限り、すべてのテキストビューが消えてしまいますコードで。最も奇妙なのは、子ビューだけに問題があることです。テキストサイズや高さを設定する必要がない場合、グループレベルは正常に機能します。
以下はコードの一部です。何が問題なのかを教えてください。本当にありがとう!!
- アクティビティ
public class WorkListActivity extends Activity implements ExpandableListView.OnGroupClickListener { private ExpandableListView elv; List<WorkTypeBean> worktypes = null; ExpandableAdapter viewAdapter; WorkTypeBean worktypeBean = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.work_items); elv = (ExpandableListView) findViewById(R.id.workList_ev); elv.setOnGroupClickListener(this); getWorkTypes(); //get all work types user can visit from server } @Override public boolean onGroupClick(ExpandableListView parent, View v, int groupPosition, long id) { if (!parent.isGroupExpanded(groupPosition)){ getWorkItems(groupPosition); //fetch work items from server only when specific group clicked } return false; } class ExpandableAdapter extends BaseExpandableListAdapter { @Override public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { ViewHolder holder; if (convertView==null){ LayoutInflater layoutInflater = (LayoutInflater) getBaseContext() .getSystemService(Context.LAYOUT_INFLATER_SERVICE); convertView = layoutInflater.inflate( R.layout.work_items_c, null); holder = new ViewHolder(); holder.tv1 = (TextView) convertView.findViewById(R.id.tv_work_item_title); holder.tv2 = (TextView) convertView.findViewById(R.id.tv_work_item_applier); holder.iv1 = (ImageView) convertView.findViewById(R.id.iv_work_item_hl); convertView.setTag(holder); }else{ holder = (ViewHolder)convertView.getTag(); } convertView.setBackgroundColor(Color.WHITE); WorkTypeBean typeBean = worktypes.get(groupPosition); if (typeBean==null){ return convertView; } WorkItemBean workitem = typeBean.getItem(childPosition); if (workitem==null){ return convertView; } String title = workitem.getTitle(); String applier = workitem.getApplier(); String postdate = workitem.getArriveTime(); int waitdays = Integer.parseInt(workitem.getWaitDays()); holder.tv1.setTextColor(Color.BLACK); holder.tv1.setText(title); holder.tv1.setTextSize(15); holder.tv2.setTextColor(Color.BLACK); holder.tv2.setTextSize(10); //if not set, tv2 remains original text "loading..." from work_item_c.xml holder.tv2.setText(applier+" ("+postdate+")"); if (waitdays > 2){ holder.iv1.setImageResource(R.drawable.wl_urgent); }else{ holder.iv1.setImageResource(R.drawable.wl_normal); } return convertView; } @Override public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { ViewHolder holder; if (convertView == null) { LayoutInflater inflater = (LayoutInflater) getBaseContext() .getSystemService(LAYOUT_INFLATER_SERVICE); convertView = inflater.inflate(R.layout.work_items_h, null); holder = new ViewHolder(); holder.tv1 = (TextView) convertView.findViewById(R.id.tv_worktype); holder.iv1 = (ImageView) convertView.findViewById(R.id.iv_worktype_counter); convertView.setTag(holder); }else{ holder = (ViewHolder)convertView.getTag(); } WorkTypeBean worktype = worktypes.get(groupPosition); if (worktype==null){ return convertView; } holder.tv1.setTextColor(Color.BLACK); holder.tv1.setText(worktype.getTitle()); return convertView; } //... some other code } }
- グループ レベルのレイアウト: work_items_h.xml //正しく動作します
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout android:layout_width="fill_parent" android:layout_height="match_parent" > <RelativeLayout android:layout_width="wrap_content" android:layout_height="match_parent" > <TextView android:id="@+id/tv_worktype" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:layout_marginLeft="50dp" android:textAppearance="?android:attr/textAppearanceLarge" /> <ImageView android:id="@+id/iv_worktype_counter" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_alignParentTop="true" /> </RelativeLayout> </LinearLayout> </LinearLayout>
- 子レベルのレイアウト: work_items_c.xml //fill_parent が機能せず、textview の高さもありません
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" > <ImageView android:id="@+id/iv_work_item_hl" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/wl_normal" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" > <TextView android:id="@+id/tv_work_item_title" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="loading..." android:textSize="15dp" /> <!--tried android:layout_height="fill_parent" but not work--> <TextView android:id="@+id/tv_work_item_applier" android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="right" android:text="loading..." android:textAppearance="?android:attr/textAppearanceSmall" android:textSize="10dp" /> </LinearLayout> </LinearLayout>