Я создал класс типа BaseAdapter, который заполняется кнопками - когда вы нажимаете на кнопку, я хочу загрузить новое намерение.Это оказалось трудным на двух уровнях:
Вы не можете связать событие с кнопкой (той, которая создает новое намерение) внутри Адаптера.Вот почему я отправляю кнопки в виде массива на мой адаптер (это решение работает, но оно грязное)
Даже если мои кнопки созданы внутри одной и той же операции - они не могут создатьновое намерение от этой деятельности.Исключение настолько велико, что я даже не получил оператор try ... catch для работы.
Я пробовал отражение, создавая кнопки внутри действия и пропуская их, передаваяконтекст (для вызова context.startIntent (...))
Мой вопрос: может ли кто-нибудь показать мне, как создать ButtonAdapter, где каждая кнопка создает новое намерение - даже того же типа, что и исходное действие?
ОБНОВЛЕНИЕ : Вот код, потому что я получаю ответы от людей, которые думают, что я борюсь с onClickListeners:
public class ButtonAdapter extends BaseAdapter
{
private Context _context;
private Button[] _button;
public ButtonAdapter(Context c, Button[] buttons)
{
_context = c;
_button = buttons;
}
// Total number of things contained within the adapter
public int getCount()
{
return _button.length;
}
// Require for structure, not really used in my code.
public Object getItem(int position)
{
return _button[position];
}
// Require for structure, not really used in my code. Can
// be used to get the id of an item in the adapter for
// manual control.
public long getItemId(int position)
{
return position;
}
public View getView(int position, View convertView, ViewGroup parent)
{
_button[position].setId(position);
return _button[position];
}
}
---------------Активность:
public class MainActivity extends Activity
{
private GridView _gv;
private TextView _heading;
private ButtonAdapter _adapter;
public void LoadActivity(String heading)
{
try
{
Itent intent = new Intent(getApplicationContext(), MainActivity.class);
intent.putExtra("Level", "NextPage");
intent.putExtra("Heading", heading);
startActivity(intent);
}
catch (Exception ex)
{
Toast.makeText(getApplicationContext(), String.format("Error LoadActivity: %s", ex.getMessage()), Toast.LENGTH_SHORT).show();
}
}
private void createButtonsAdapter(Button _button[])
{
_buttonadapter = new ButtonAdapter(getApplicationContext(), _button);
_gv.setAdapter(_adapter);
}
private void setupButtons()
{
Button[] _buttons = new Button[2];
String names[] = new String[]{"Button1","Button2"};
for (int i = 0; i < 2; i++)
{
_buttons[i] = new Button(this);
_buttons[i].setText(names[i]);
_buttons[i].setTag(names[i]);
_buttons[i].setOnClickListener(new View.OnClickListener()
{
public void onClick(View arg0)
{
try
{
LoadActivity(((Button)arg0).getTag().toString());
}
catch(Exception ex)
{
Toast.makeText(getApplicationContext(), String.format("Error button.onClick: %s", ex.getMessage()), Toast.LENGTH_SHORT).show();
}
}
});
}
createButtonsAdapter(_buttons);
}
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
_gv = (GridView)findViewById(R.id.gridview);
_heading = (TextView)findViewById(R.id.tv_heading);
Bundle params = getIntent().getExtras();
if (params == null)
{
setupButtons();
}
else if (params.containsKey("Level"))
{
_heading.setText(params.getString("Heading"));
if (params.getString("Level").equals("NextPage"))
{
//code not here yet
}
else if (params.getString("Level").equals("Chapters"))
{
//future code
}
}
}
}
Извините за жирный шрифт и заглавные буквы, но у меня было достаточно глупых ответов, чтобы оправдать это: Я ПОПЫТАЛСЯ ПОСТАВИТЬ ONCLICKLISTENER ВНУТРИ СЕТЕВОГО ВИДА, И ЭТО НЕ РАБОТАЕТ Вы не можете загрузить действие из класса вне этого действия, даже если вы передали контекст в качестве параметра.Вот почему я прибег к этому методу, который полностью взрывает Android, хотя я пытаюсь использовать операторы catch.
Пожалуйста, попробуйте дать мне решение в форме исправления моего кода, другого кода илиучебник, который достигает того, что я хочу здесь.Я знаю, как правильно сделать адаптер кнопок, именно загрузка Intent заставила меня реализовать его таким образом.