2

FoodとSectionItemの2つの異なるタイプのオブジェクトを取ることができるListViewがあります。

私はこれを持っています:

ここに画像の説明を入力

このように、SectionItem と Food アイテムの間にレイアウトのパディング/マージンの違いを作ることが可能かどうかを知りたいです (1 つの ListView のみを使用し続けます):

ここに画像の説明を入力

これが私のアダプターです:

public class FoodsAdapter extends ArrayAdapter<Item> {

    private Context context;
    private ArrayList<Item> items;
    private LayoutInflater vi;

    public FoodsAdapter(Context context,ArrayList<Item> items) {
        super(context,0, items);
        this.context = context;
        this.items = items;
        vi = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View v = convertView;

        final Item i = items.get(position);
        if (i != null) {
            if(i.isSection()){
                SectionItem si = (SectionItem)i;
                v = vi.inflate(R.layout.activity_souscarte_list_item_titlesouscategorie, null);

                v.setOnClickListener(null);
                v.setOnLongClickListener(null);
                v.setLongClickable(false);

                final TextView sectionView = (TextView) v.findViewById(R.id.souscarte_titlesouscategorie);
                sectionView.setText(si.getTitle());
            }else{
                Food food = (Food)i;
                v = vi.inflate(R.layout.activity_souscarte_list_item_elementsouscategorie, null);

                final TextView title = (TextView) v.findViewById(R.id.souscarte_element_title);
                final TextView prix =  (TextView) v.findViewById(R.id.souscarte_element_prix);
                final TextView desc =  (TextView) v.findViewById(R.id.souscarte_element_desc);

                if (title != null)
                        title.setText(food.getName());
                if (prix != null)
                        prix.setText(Float.toString(food.getPrice())+ "€");
                if (desc != null)
                        desc.setText(food.getDescription());
            }
        }
        return v;
    }

}

ここに私の活動があります:

public class SousCarteActivityNew extends Activity {
    private ArrayList<ArrayList<Food>> arraySousCategories;
    private ArrayList<Item> allFoodsInOne;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_souscarte_list_item);

        arraySousCategories = FoodsContainer.sousCategoriesArray;

        allFoodsInOne = new ArrayList<Item>();
        for (ArrayList<Food> foodArray : arraySousCategories){
            allFoodsInOne.add(new SectionItem(foodArray.get(0).getType()));
            for (Food food : foodArray){
                allFoodsInOne.add(food);
            }
        }
        LinearLayout ll = (LinearLayout) findViewById(R.id.souscarte_linearlayout);
        ListView lv = new ListView(getApplicationContext());
        FoodsAdapter adapter = new FoodsAdapter(getApplicationContext(), allFoodsInOne);
        lv.setAdapter(adapter);
        ll.setPadding(15, 15, 15, 0);
        ll.addView(lv);
    }
}

ここに私の activity_souscarte_list_item_titlesouscategorie.xml があります:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <TextView android:id="@+id/souscarte_titlesouscategorie"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:background="@color/green"
        android:gravity="center"
        android:layout_margin="0dp"
        android:textColor="@color/white"
        android:textSize="19sp"/>

</LinearLayout>

ここに私の activity_souscarte_list_item_elementsouscategorie.xml があります:

<?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="wrap_content"
    android:orientation="vertical" 
    android:background="@color/white"
    android:id="@+id/souscarte_element_layout"
    android:layout_marginLeft="17dp"
    android:layout_marginRight="17dp"
    android:padding="5dp">
    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >
        <TextView android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textStyle="bold"
            android:id="@+id/souscarte_element_title"
            android:textColor="@color/black"
            android:layout_weight="3"
            android:paddingLeft="5dp"/>
        <TextView android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textStyle="bold"
            android:id="@+id/souscarte_element_prix"
            android:gravity="right"
            android:textColor="@color/black"
            android:layout_weight="1"
            android:paddingRight="5dp"/>
    </LinearLayout>
    <TextView android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:textColor="@color/black"
        android:id="@+id/souscarte_element_desc"
        android:paddingLeft="5dp"
        android:paddingRight="5dp"/>
</LinearLayout>
4

2 に答える 2

1

はい、解決策があります。top_marginメソッドからあなたのセクションに異なるものを与えてくださいgetView。これには、 を使用する必要がありますLinearLayoutParam

setMargin(left,top,right,bottom)適切な値を与えて行topに割り当てるだけというメソッドがあります。layoutParam

于 2013-03-29T18:39:28.420 に答える
0

トリックを行うために、すべてのレイアウトをパディング付きの FrameLayout に入れました。

于 2013-03-30T00:13:08.250 に答える