Задать текст на основе нажатия элемента списка
У меня есть макет, состоящий из ListView и метки. Посмотрите на изображение ниже.
Я реализовал просмотр списка с помощью базового адаптера в отдельном файле.java. Может кто-нибудь предложить мне, как я могу установить текст для метки при нажатии элемента списка?
ИЗДАНО:
Текст метки должен быть числом нажатых пунктов списка. Предположим, что я нажал кнопку в элементе списка, метка должна быть установлена на 1. Аналогично, в следующей попытке, если я нажал кнопку другого элемента списка, он должен быть установлен на 2 и т. Д...
7 ответов
Сэр,
Вы говорите, что у вас есть адаптер в одном классе и активность в другом файле. Ну, вы могли бы сделать это, чтобы обновить текстовое представление.
передать контекст в действие, и если он находится в адаптере, вы поддерживаете счетчик, то после обновления счетчик,
затем предположим, что у вас есть этот метод в упражнении
public void updateTextView(int count) {
// enter your code here to set the count in the textview
}
и из baseAdapter вызовите вышеуказанный метод следующим образом:
if(mContext != null) {
((YourActivity)mContext).updateTextView(mCount);
}
и текстовое представление в деятельности будет обновлено! Я надеюсь, что это помогает.
В вашем OnItemClickListener
вызов adapter.getItem(int position)
чтобы извлечь объект из коллекции, поддерживающей ваш BaseAdapter
, Оттуда вы сможете получить любые поля, которые вам нужны.
Редактировать:
Ваше редактирование проясняет вопрос. Обновленный ответ:
private int mCounter = 0;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// ListView listView = getYourListView();
listView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
mCounter++;
updateTextView();
}
});
if(savedInstanceState != null) {
mCounter = savedInstanceState.getInt("counter", 0);
}
updateTextView();
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putInt("counter", mCounter);
}
private void updateTextView() {
// TextView textView = getYourTextView();
textView.setText(String.valueOf(mCounter));
}
Просто OnItemClickListener
в вашем ListView
затем в onClick
вы получите значение arg2
какой position
предмета, по которому щелкают.
Просто получите это значение из ArrayList
из которого вы отображаете ListView
и покажи это...
Надеюсь, это то, что вам нужно, если я не понял ваш вопрос.
В onListItemClick
вызов list.getItemAtPosition(position)
получить текст элемента
затем установите этот текст в textview1.setText(listText)
,
Попробуй этот код
listview.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
String itemText=(String) arg0.getItemAtPosition(arg2);
yourLable.setText(itemText);
}
});
Сначала реализуйте свой onItemClickListener, где вы получите параметр int arg2, который является position, поэтому получайте эту позицию и делайте все, что захотите, как показано ниже.
list.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
LABLE.setText(""+arg2);
}
});
Проверьте этот код
public class ListA extends ListActivity {
private TextView selection;
private static final String[] items={"Item 1", "Item 2", "Item 3"};
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.activity_list);
setListAdapter(new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1,
items));
selection=(TextView)findViewById(R.id.selection);
}
@Override
public void onListItemClick(ListView parent, View v, int position,
long id) {
selection.setText(position);
}
}