如何在其他人的右侧添加ImageView / textView ImageView / textView采用相同的布局

时间:2016-04-09 16:45:17

标签: android arrays android-layout textview imageview

所以在我的代码中我有6个数组(最后5个可能是空的)对象。每个对象都有一个名称,并且数组可以包含许多每个对象(每个数组都被排序,因此每个项目都被分组)。

首先,我有这个xml文件:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/fond4"
android:orientation="vertical"
tools:context="${relativePackage}.${activityClass}" >

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center_horizontal"
    android:layout_marginTop="20dp"
    android:background="@color/white"
    android:gravity="center"
    android:text="@string/commentOpti"
    android:textSize="20sp" />

<Button
    android:id="@+id/choisirTroupe"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center_horizontal"
    android:layout_marginTop="20dp"
    android:onClick="soumission"
    android:text="@string/lancer" />

<ScrollView
    android:layout_width="fill_parent"
    android:layout_height="wrap_content" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        tools:context="${relativePackage}.${activityClass}" >

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal"
            android:layout_marginTop="20dp"
            android:background="@color/white"
            android:gravity="center"
            android:text="@string/casernes"
            android:textSize="20sp" />

        <!-- Caserne 1 -->

        <LinearLayout
            android:id="@+id/caserne1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="20dp"
            android:background="@color/white"
            android:orientation="horizontal" >

            <ImageView
                android:layout_width="40dp"
                android:layout_height="40dp"
                android:layout_marginLeft="10dp"
                android:background="@drawable/caserne" />

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="10dp"
                android:text="@string/deuxPoints"
                android:textSize="25sp" />
        </LinearLayout>

        //Then 5 other like this 1st linearLayou
        //The ids are incremented each time like caserne2 for the 2nd etc...


</ScrollView>

看起来像这样:https://gyazo.com/17a1276dfff5521d540fb6dc953df424

我想要做的是,对于每个数组中的每个对象(一个数组:一个线性布局),添加一个带有Item数量的textView和一个代表该对象的imageView。

接下来,你会发现我如何对所有事情进行排序,我认为这并不重要,但是如果你想理解你必须要了解的所有内容:p

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_optimisation);

    LinearLayout caserne1 = (LinearLayout) findViewById(R.id.caserne1);
    //...Doing this for the 5 others...

    Intent intent = getIntent();


    //Instanciation of my object
    OptiClashOfClans o = new OptiClashOfClans();

    //In fact, the number of linearLayout i'll have to work with
    o.setNbCasernes(this.nbCaserne);

    if (this.nbBarbares > 0)
        o.ajouterFormation(1, this.nbBarbares);
    //...Adding each object in on array...      
    o.setAFormer(o.triTroupe());

    //And finally here i'll put each object in the good array
    o.orgaCaserne(o);

现在我们解决了我的问题,这部分代码就在我之前的代码旁边,这里是我如何获取每个数组中相同对象的数量

for (int cptCaserne = 0; cptCaserne < this.nbCaserne; cptCaserne++) {


        // Here I pick up the array of object I'll work with
        Caserne casTmp = o.getCaserneNum(cptCaserne);


        // Here I pick every object which are in the previous array
        ArrayList<Troupe> enFormTmp = new ArrayList<Troupe>();
        enFormTmp = casTmp.getEnFormation();

        // To count where I am in the array of object
        int cptAFormer = 0;         

        //To know if the next object is different from the one I'm working with
        Troupe troupTmp = enFormTmp.get(cptAFormer);

        int cptTroupTmp = 0;

        //For the object t in the array of object
        for (Troupe t : enFormTmp) {
            cptTroupTmp = 0;

            //While the object is the same from the one we're working with
            while (!troupTmp.equals(t)) {
                //Incrementing the previous counter
                cptTroupTmp++;
                cptAFormer++;
            }

最后,我不知道该怎么做:

            ImageView iView = new ImageView(Optimisation.this);

            //To know which background i'll add to the image view
            //I'll do this for each different object
            if (t.getNom().equals("Barbare"))
                iView.setImageResource(R.drawable.barbare);
            //...

            //The text view with the number of object I found
            TextView tView = new TextView(Optimisation.this);
            tView.setText("" + cptTroupTmp);


            //And now it's here where I want to add the different views
            switch (cptCaserne) {
            case 0:
                caserne1.addView(tView);
                caserne1.addView(iView);
            case 1:
                caserne2.addView(tView);
                caserne1.addView(iView);
            case 2:
                caserne3.addView(tView);
                caserne1.addView(iView);
            case 3:
                caserne4.addView(tView);
                caserne1.addView(iView);

            }
            troupTmp = enFormTmp.get(cptAFormer);
        }

    }

使用此代码,当我正在进行此活动时,我有一个疯狂的黑屏。 这是我想要用红色的textView与objet的数量,绿色的对象的imageView ... https://gyazo.com/31b16982ce30b66391bafdd2cd4d86fc

我发现了一些与LayoutInflater有关的东西,但我还没有成功完成这些......如果你能帮助我的话,非常感谢。

PS:对不起,我认为有很多错误,但在这样的长篇文章中,我的学校英语不是很有效^^ 再次感谢:)

1 个答案:

答案 0 :(得分:1)

如果我错了,请纠正我。但根据我的理解,你只需要完成这里显示的内容https://gyazo.com/31b16982ce30b66391bafdd2cd4d86fc

根据您的代码,您只需在添加TextView和图像视图之前在每个LinearLayout上添加一个具有水平方向的附加LinearLayout。

以下是使用您的代码的示例:

LinearLayout innerLayout = new LinearLayout(Optimisation.this)
innerLayout.setOrientation(LinearLayout.HORIZONTAL);
ImageView iView = new ImageView(Optimisation.this);

        //To know which background i'll add to the image view
        //I'll do this for each different object
        if (t.getNom().equals("Barbare"))
            iView.setImageResource(R.drawable.barbare);
        //...

        //The text view with the number of object I found
        TextView tView = new TextView(Optimisation.this);
        tView.setText("" + cptTroupTmp);


        innerLayout.addView(tView);
        innerLayout.addView(iView);

        //And now it's here where I want to add the different views
        switch (cptCaserne) {
        case 0:
            caserne1.addView(innerLayout);
        case 1:
            caserne2.addView(innerLayout);
        case 2:
            caserne3.addView(innerLayout);
        case 3:
            caserne4.addView(innerLayout);

        }

如果我添加innerLayout的布局错误,请随意调整它。但基本上,这就是主意。