2014-05-19 2 views
0

Я ознакомился с учебным пособием в сети, чтобы реализовать расширяемый список с тремя уровнями. Но проблема в том, что этот список занимает только часть макета и прокручивается в этой части. Я новичок и не знаю, где изменить помощь code.PleaseРасширяемый ListView занимает только часть макета

public class MainActivity extends Activity { 
public static CustomExpandableListView list; 
private HttpRequestActivity request; 
private String response; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    list= new CustomExpandableListView(this); 
    Interest adapter= new Interest(this, objectsLvl1); 
    list.setAdapter(adapter); 

    LinearLayout parent= (LinearLayout) findViewById(R.id.parent); 
    parent.addView(list);  
    } 
    } 


    Adapter class for ExpandableListView 

    class CustomExpandableListView extends ExpandableListView {  
public CustomExpandableListView(Context context) { 
    super(context);  
} 

protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 

    // Adjust height 
    Log.d("ONMEASURE", "OnMeasure is called"); 
    heightMeasureSpec = MeasureSpec.makeMeasureSpec(500, MeasureSpec.AT_MOST); 
    super.onMeasure(widthMeasureSpec, heightMeasureSpec); 
} 
    }` 


    Xml layout: 

    <?xml version="1.0" encoding="UTF-8"?> 
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:background="#90EE90" 

    android:orientation="vertical" > 

    <RelativeLayout 
    android:layout_width="fill_parent" 
    android:layout_height="98dp" > 

    <TextView 
     android:id="@+id/textView2" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_centerHorizontal="true" 
     android:layout_centerVertical="true" 
     android:text="@string/mytextview" 
     android:textAppearance="?android:attr/textAppearanceMedium" /> 

    </RelativeLayout> 

    <LinearLayout 
    android:id="@+id/parent" 
    android:layout_width="match_parent" 
    android:layout_height="0dip" 
    android:layout_weight="1" 
    android:orientation="vertical" > 
    </LinearLayout> 

    </LinearLayout>` 




    public class Interest extends BaseExpandableListAdapter { // For top level i..e 

private List<Object> objects; 
private Activity activity; 
private LayoutInflater inflater; 

public Interest(Activity activity, List<Object> objects) { 
    this.objects = objects; 
    this.activity = activity; 
    this.inflater = (LayoutInflater) activity 
      .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
} 

@Override 
public Object getChild(int groupPosition, int childPosition) { 
    return objects.get(groupPosition).getObjects().get(childPosition); 
} 

@Override 
public long getChildId(int groupPosition, int childPosition) { 
    return childPosition; 
} 

@Override 
public View getChildView(int groupPosition, int childPosition, 
     boolean isLastChild, View convertView, ViewGroup parent) { 

    Object object = (Object) getChild(groupPosition, childPosition); 
CustomExpandableListView subObjects = (CustomExpandableListView) convertView; 
    ; 
    if (convertView == null) { 
     subObjects = new CustomExpandableListView(activity); 
    } 
    Int adapter = new Int(activity, object); 
    subObjects.setAdapter(adapter); 

    return subObjects; 
} 

@Override 
public int getChildrenCount(int groupPosition) { 
    return objects.get(groupPosition).getObjects().size(); 
} 

@Override 
public Object getGroup(int groupPosition) { 
    return objects.get(groupPosition); 
} 

@Override 
public int getGroupCount() { 
    return objects.size(); 
} 

@Override 
public long getGroupId(int groupPosition) { 
    return groupPosition; 
} 

@Override 
public View getGroupView(int groupPosition, boolean isExpanded, 
     View convertView, ViewGroup parent) { 

    Object object = (Object) getGroup(groupPosition); 
    if (convertView == null) { 
     convertView = inflater.inflate(R.layout.listview_element,null); 
    } 

    TextView name = (TextView) convertView.findViewById(R.id.name); 
    name.setText(object.getName()); 


    // System.out.println("Inside Click 1" + object.getName()); 
    return convertView; 
} 

@Override 
public boolean hasStableIds() { 
    return true; 
} 

@Override 
public boolean isChildSelectable(int groupPosition, int childPosition) { 
    return true; 
} 
     } 

     class Int extends BaseExpandableListAdapter { 
private Object object; 
private LayoutInflater inflater; 
private Activity activity; 
public String message; 

public Int(Activity activity, Object object) { 
    this.activity = activity; 
    this.object = object; 
    this.inflater = (LayoutInflater) activity 
      .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
} 

@Override 
public Object getChild(int groupPosition, int childPosition) { 
    return object.getObjects().get(childPosition); 
} 

@Override 
public long getChildId(int groupPosition, int childPosition) { 
    return childPosition; 
} 

@Override 
    public View getChildView(int groupPosition, int childPosition, 
    boolean isLastChild, View convertView, ViewGroup parent) { 



    Object object= (Object) getChild(0, childPosition); 

    if (convertView==null) { 
    convertView= inflater.inflate(R.layout.listview_element, null); 

    Resources r = activity.getResources(); 
    float px40 = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 40,r.getDisplayM 
                      etrics()); 
    convertView.setPadding(
    convertView.getPaddingLeft() + (int) px40, 
    convertView.getPaddingTop(), 
    convertView.getPaddingRight(), 
    convertView.getPaddingBottom()); 
    } 

    TextView name= (TextView) convertView.findViewById(R.id.name); 
    name.setText(object.getName()); 




    convertView.setOnClickListener(new OnClickListener() { 
    public void onClick(View view) { 



Context context = view.getContext(); 

Intent redirect = new Intent(context,Tabs.class); 
redirect.putExtra("message", message); 
    context.startActivity(redirect); 
    } 
    }); 

    return convertView; 
    } 

public void onclickmodified() { 

} 

@Override 
public int getChildrenCount(int groupPosition) { 
    return object.getObjects().size(); 
} 

@Override 
public Object getGroup(int groupPosition) { 
    return object; 
} 

@Override 
public int getGroupCount() { 
    return 1; 
} 

@Override 
public long getGroupId(int groupPosition) { 
    return groupPosition; 
} 

@Override 
public View getGroupView(int groupPosition, boolean isExpanded, 
     View convertView, ViewGroup parent) { 

    if (convertView == null) { 
     convertView = inflater.inflate(R.layout.listview_element, null); 
     Resources r = activity.getResources(); 
     float px20 = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 
       20, r.getDisplayMetrics()); 
     convertView.setPadding(convertView.getPaddingLeft() + (int) px20, 
       convertView.getPaddingTop(), 
            convertView.getPaddingRight(), 
       convertView.getPaddingBottom()); 
    } 

    TextView name = (TextView) convertView.findViewById(R.id.name); 
    name.setText(object.getName()); 

    return convertView; 
} 

@Override 
public boolean hasStableIds() { 
    return true; 
} 

@Override 
public boolean isChildSelectable(int groupPosition, int childPosition) { 
    return true; 
} 

public boolean onChildClick(CustomExpandableListView parent, View v, 
     int groupPosition, int childPosition, long id) { 
    // Log.d("TAG","Success"); 
    return true; 
} 
+0

... какой код? –

+0

где код для ** ExpandableListView ** и в xml также? ГДЕ? – OnePunchMan

ответ

-1

Используйте Scrollview.VerticalAlignment = «Stretch», а также высоту = «Auto», и если он находится в Сетка определяет высоту строки как «*».

<Grid x:Name="Content"> 
       <Grid.RowDefinitions> 
        <RowDefinition Height="Auto"/> 
        <RowDefinition Height="*"/> 
       </Grid.RowDefinitions> 

Авто будет использовать только столько места, сколько необходимо для ребенка, и * будет использовать оставшееся свободное пространство.

+0

Извиняюсь, я просто понял, что вы работаете на Android, я изначально думал, что вы программируете в .Net. –

+0

Если вы используете Java, тогда сделайте высоту ListView «fill_parent», это также зависит от того, используете ли вы LinearLayout или RelativeLayout. –

Смежные вопросы