добавить ((RelativeLayout) findViewById) в ArrayList

#java #android #android-layout #dynamic

#java #Android #android-макет #динамический

Вопрос:

У меня есть следующий код:

 public class MainActivity extends Activity implements OnClickListener {

    public ArrayList<RelativeLayout> buttons = new ArrayList<RelativeLayout>();
    public ArrayList<Integer> drawableId = new ArrayList<Integer>();

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main_layout);
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
        linear = (LinearLayout) findViewById(R.id.Rlayout);
        scrool = (ScrollView) findViewById(R.id.scrool);
        for (int i = 0; i < buttons.size(); i  ) {
            {
                String buttonID = "Llayout"   i;
                int resID = getResources().getIdentifier(buttonID, "id",
                        getPackageName());
                //The problem is here
                buttons.get(i).add((RelativeLayout) findViewById(resID));

                buttons.get(i).setOnClickListener(this);
                drawableId.add(getResources().getIdentifier("supa"   i, "drawable", getPackageName()));
            }
        }
    }


  @Override
    public void onClick(View v) {
        for (int i = 0; i < buttons.size(); i  ) {
            if (buttons.get(i).getId() == v.getId()) {
                index = i;
                Intent trimite = new Intent(MainActivity.this, RecipeView.class);
                Bundle colet = new Bundle();
                colet.putString("key", Content.RETETE[i]);
                colet.putInt("keyimg", drawableId.get(i));
                trimite.putExtras(colet);
                startActivity(trimite);
                break;
            }
        }
    }
}
  

Я не могу заставить это работать:

 buttons.get(i).add((RelativeLayout) findViewById(resID));
  

Ошибка Java гласит, что: add((RelativeLayout) is undefined for the type RelativeLayout .

Метод add работает для ArrayList drawableId, на одну строку ниже, но не для кнопок. Кто-нибудь, пожалуйста, может мне помочь?

Вот мой XML-макет:

 <?xml version="1.0" encoding="utf-8"?>
   <ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
       xmlns:tools="http://schemas.android.com/tools"
       android:id="@ id/scrool"
       android:layout_width="fill_parent"
       android:layout_height="fill_parent"
       android:fillViewport="true"
       android:scrollbars="vertical"
       tools:context=".MainActivity"
       tools:ignore="MergeRootFrame" >

       <LinearLayout
           android:id="@ id/Rlayout"
           android:layout_width="fill_parent"
           android:layout_height="wrap_content"
           android:keepScreenOn="true"
           android:orientation="vertical" >

           <RelativeLayout
               android:id="@ id/Llayout0"
               android:layout_width="fill_parent"
               android:layout_height="wrap_content"
               android:clickable="true"
               android:focusable="true"
               android:onClick="onClick"
               android:orientation="vertical" >

               <ImageView
                   android:id="@ id/iv0"
                   android:layout_width="50dp"
                   android:layout_height="50dp"
                   android:layout_gravity="left"
                   android:contentDescription="@string/desc"
                   android:src="@drawable/supa0" />

               <TextView
                   android:id="@ id/tv0"
                   android:layout_width="wrap_content"
                   android:layout_height="wrap_content"
                   android:layout_centerHorizontal="true"
                   android:layout_centerVertical="true"
                   android:text="@string/supa"
                   android:textAppearance="?android:attr/textAppearanceLarge" />
           </RelativeLayout>

           <RelativeLayout
               android:id="@ id/Llayout1"
               android:layout_width="fill_parent"
               android:layout_height="wrap_content"
               android:clickable="true"
               android:focusable="true"
               android:onClick="onClick"
               android:orientation="vertical" >

               <ImageView
                   android:id="@ id/iv1"
                   android:layout_width="50dp"
                   android:layout_height="50dp"
                   android:layout_gravity="left"
                   android:contentDescription="@string/desc"
                   android:src="@drawable/supa0" />

               <TextView
                   android:id="@ id/tv1"
                   android:layout_width="wrap_content"
                   android:layout_height="wrap_content"
                   android:layout_centerHorizontal="true"
                   android:layout_centerVertical="true"
                   android:text="@string/supa1"
                   android:textAppearance="?android:attr/textAppearanceLarge" />
           </RelativeLayout>
       </LinearLayout>
   </ScrollView>
  

Я создал кнопки из RelativeLayouts. Каждая кнопка RelativeLayout содержит текст и значок рядом с текстом. Все кнопки RelativeLayouts находятся в LinearLayout, так что они выровнены друг под другом.

Когда кнопки RelativeLayouts и ArrayList drawableId были простыми массивами, это работало отлично, но я не хочу изменять массив каждый раз, когда добавляю новую кнопку RelativeLayout.

Есть предложения?

Ответ №1:

У RelativeLayout класса нет add() метода.

buttons представляет собой массив RelativeLayout. При вызове buttons.get(i) вы получаете единственный объект RelativeLayout. Поскольку у RelativeLayout нет add() метода, вы получаете эту ошибку.

Не совсем ясно, каковы ваши намерения с этим кодом, но я предполагаю, что вы пытаетесь добавить каждое из ваших RelativeLayout в buttons список.

Если это правильно, вам просто нужно удалить get(i) вызов, превратив эту строку в

 buttons.add((RelativeLayout) findViewById(resID));
  

Комментарии:

1. Как я уже сказал, каждый RelativeLayout — это кнопка. Я Пытаюсь добавить относительный макет buton в список, чтобы каждая кнопка имела идентификатор от i до buttons.size(). Ваш метод не присваивает ни одной кнопке идентификатор, поэтому я не могу нажать ни на одну кнопку.

2. Я добавил метод onClick из того же класса.

3. Я просто хочу добавить идентификаторы к относительным макетам для каждой кнопки, как я сделал строку ниже с buttons.get(i).setOnClickListener.

4. да, они это делают, и при использовании вашего метода ошибка исчезает. я запускаю программу и не могу нажать ни на одну кнопку. это то, что я пытался использовать get (i).add.

Ответ №2:

Попробуйте этот способ, надеюсь, это поможет вам решить вашу проблему.

 public class MainActivity extends Activity implements View.OnClickListener {

    private ArrayList<RelativeLayout> buttons = new ArrayList<RelativeLayout>();
    private ArrayList<Integer> drawableId = new ArrayList<Integer>();
    private LinearLayout linear;
    private ScrollView scrool;
    private int index;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
        linear = (LinearLayout) findViewById(R.id.Rlayout);
        scrool = (ScrollView) findViewById(R.id.scrool);


        for (int i = 0; i < linear.getChildCount(); i  ) {
            {
                String buttonID = "Llayout"   i;
                int resID = getResources().getIdentifier(buttonID, "id",getPackageName());
                buttons.add((RelativeLayout)findViewById(resID));
                buttons.get(i).setOnClickListener(this);
                drawableId.add(getResources().getIdentifier("supa"   i, "drawable", getPackageName()));
            }
        }
    }


    @Override
    public void onClick(View v) {
        for (int i = 0; i < buttons.size(); i  ) {
            if (buttons.get(i).getId() == v.getId()) {
                index = i;
                Toast.makeText(MyActivity.this,String.valueOf(index),Toast.LENGTH_SHORT).show();
                Intent trimite = new Intent(MainActivity.this, RecipeView.class);
                Bundle colet = new Bundle();
                colet.putString("key", Content.RETETE[i]);
                colet.putInt("keyimg", drawableId.get(i));
                trimite.putExtras(colet);
                startActivity(trimite);
                break;
            }
        }
    }
}
  

Комментарии:

1. не могли бы вы, пожалуйста, одобрить, чтобы это могло помочь другим.

2. У меня есть еще один вопрос. В классе Content у меня есть строка с именем RETETE , где у меня хранятся некоторые рецепты. Затем я получаю их по идентификатору индекса кнопки с заголовком получателя. Я хочу знать, какие другие методы я могу использовать для хранения этих рецептов и уже отформатировать их (например, отступы, жирный шрифт и т.д.). Поэтому, когда я получаю их, они уже сформированы. В строке я не могу действительно отформатировать текст.