2013-10-03 6 views
0

У меня есть макет, состоящий из ListView и метки. Посмотрите на изображение ниже.Установить текст на основе элемента списка нажмите

enter image description here

Я реализовал ListView, используя базовый адаптер в отдельном файле .java. Может ли кто-нибудь предложить мне, как я могу установить текст на ярлык при нажатии элемента списка?

EDITED:

Текст этикетке должно быть количество элементов списка щелкнул. Предположим, я нажал на кнопку в пункте в списке, ярлык должен быть установлен в 1. Аналогично в следующей попытке, если я нажал кнопку другого списка элемента он должен быть установлен на 2 и так .. на ..

+0

вы пытаетесь установить метку на любой текст, который щелкнул элемент списка имеет? – Peshal

+0

№. У меня есть другая логика для установки текста для метки. –

+0

Что вы пробовали и где ваша проблема? Вы используете OnItemClickListener или кнопки в каждом конвертере? –

ответ

2

Сэр,

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

передать контекст деятельности, и если его адаптер вы поддерживаете счетчик, то после того, как граф был обновлен,

то, что у вас есть этот метод в деятельности

public void updateTextView(int count) { 
    // enter your code here to set the count in the textview 
} 

и от baseAdapter называют указанный выше способ, как это:

if(mContext != null) { 
    ((YourActivity)mContext).updateTextView(mCount); 
} 

и TextView в деятельности будет обновлена! Надеюсь, это поможет.

+0

Привет, я получаю ошибку времени компиляции, говоря, что GridActivity не может быть разрешен в тип, когда я пытался ((GridActivity) cont) .updateValueTextView (1); , Вы уверены, что можем так вызвать updateValueTextView() активности? –

+0

Да, я уверен. Убедитесь, что вы передаете контекст адаптеру, как это вместо активности. –

+1

@ G_S Комментарий Дхара неверен (ее ответ правильный, хотя). Вы должны передать адаптер «this» или «GridActivity.this». Передача контекста с использованием 'getBaseContext()' или 'getApplicationContext()' не будет работать, потому что вам нужно поднять 'mContext' в' GridActivity', чтобы вызвать 'GridActivity # updateValueTextView()'.Ошибка, которую вы видите, не из-за этого. Вы должны понять, почему ваша среда IDE не может разрешить «GridActivity». Попробуйте использовать полное имя класса ..... – Vikram

2

В вашем OnItemClickListener позвоните adapter.getItem(int position), чтобы получить объект из коллекции, поддерживающей ваш BaseAdapter. Оттуда вы сможете получить нужные поля.

Edit:

Ваша правка проясняет вопрос. Обновленный ответ:

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)); 
} 
+0

мой пользовательский код адаптера находится в одном файле, а действительная активность - в другом. Как вы думаете, использование текстового поля (которое в моей деятельности) будет доступно в моем пользовательском адаптере? –

+0

Вы должны сохранить ссылку на свой адаптер в своей «Деятельности» в качестве переменной-члена. Таким образом, в 'onItemClick' вы можете просто называть что-то вроде' mAdapter.getItem (position) '. Это вернет объект, который находится в данной позиции в наборе данных, поддерживающем ваш адаптер (обычно это ArrayList). –

+0

Можете ли вы когда-нибудь увидеть обновленный вопрос. –

1

Просто OnItemClickListener в вашем ListView то в onClick вы получите значение arg2 которое является position элемента, который щелкнули.

Просто получить это значение из ArrayList, из которого вы отображающей ListView и показать его ...

Надежда это то, что вам нужно, если я не понял ваш вопрос.

+0

Дубликат моего ответа. –

+0

Чувак, я так не думаю. Существует огромное различие между вашим и моим объяснением, и я не думаю, что в своем объяснении я использовал adapter.getItem (int position). –

+0

«Просто получите это значение из ArrayList, из которого вы показываете ListView, и покажите его» - вызов 'getItem (int)' на адаптере является правильным способом для этого. –

0

попробуйте этот код

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); 

     } 
    }); 
+0

И еще один ... –

+0

мой пользовательский код адаптера находится в одном файле, а действительная активность - в другом. Как вы думаете, использование textview1 (которое в моей деятельности) будет доступно в моем пользовательском адаптере? –

0

onListItemClick В вызове list.getItemAtPosition(position) для извлечения элемента текста

затем установите этот текст textview1.setText(listText).

+0

Еще один дубликат моего ответа. –

+0

мой пользовательский код адаптера находится в одном файле, а фактическая активность - в другом. Как вы думаете, использование textview1 (которое в моей деятельности) будет доступно в моем пользовательском адаптере? –

+0

да, он будет доступен из другой деятельности. Зависит от того, что вы хотите сделать – AnAndroid

0

Сначала выполните свой onItemClickListener, где вы получите параметр int arg2, который является позицией, поэтому получите эту позицию и сделайте все, что захотите, как показано ниже.

list.setOnItemClickListener(new OnItemClickListener() { 

      @Override 
      public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, 
        long arg3) { 

       LABLE.setText(""+arg2); 

      } 
     }); 
+0

Я использую класс, который расширяет базовый адаптер и переопределяет getView(). В getview() У меня есть кнопка, с которой я обрабатываю событие onclick. И ярлык находится в действии. Я не думаю, что метка будет доступна в классе пользовательских адаптеров. –

0

Проверить этот код

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); 
} 
} 
+0

У меня есть вся моя логика в Amader. Мне будет трудно вернуться к списку активности –

Смежные вопросы