#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 , где у меня хранятся некоторые рецепты. Затем я получаю их по идентификатору индекса кнопки с заголовком получателя. Я хочу знать, какие другие методы я могу использовать для хранения этих рецептов и уже отформатировать их (например, отступы, жирный шрифт и т.д.). Поэтому, когда я получаю их, они уже сформированы. В строке я не могу действительно отформатировать текст.