2012-04-18 1 views
2

У меня проблема с моим OnItemClickListener. Это может быть полезно отметить, что я написал это следующие руководящие принципы, поставляемые андроида Сайт разработчика: http://developer.android.com/resources/tutorials/views/hello-listview.htmlAndroid-код не принимается - OnItemClickListener() - «... должен реализовать унаследованное ..»

При установке слушателя:

lv.setOnItemClickListener(new OnItemClickListener() { 

Я следующее сообщение об ошибке показано для нового " OnItemClickListener»

"Тип нового AdapterView.OnItemClickListener() {} должен реализовать унаследованный абстрактный метод AdapterView.OnItemClickListener.onItemClick (AdapterView, вид, INT, длинный)"

Ive пытался, что затмение предполагает и добавил по-видимому, нереализованный метод, но он просто генерирует метод, который почти идентичен кроме фактических особенностей в параметрах, например, где я

"int position" 

автогенерируемого код имеет

"int arg2" 

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

Я попытался изменить различные части кода, такие как содержимое параметров и т. Д., Но мне не повезло. Так что им в основном ищет помощь в решении этой проблемы, пожалуйста, любые советы/направление будут оценены. Мой полный код показан ниже:

import android.app.Activity; 
import android.app.ListActivity; 
import android.os.Bundle; 
import android.widget.AdapterView; 
import android.widget.AdapterView.OnItemClickListener; 
import android.widget.ArrayAdapter; 
import android.widget.ListView; 
import android.widget.TextView; 
import android.widget.Toast; 

public class View extends ListActivity{ 
static final String[] entriesArray = new String[]{ 
    "One", "Two", "Three", "GO"}; 


@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    setListAdapter(new ArrayAdapter<String>(this, R.layout.dbrowviewer, entriesArray)); 

    ListView lv = getListView(); 
    lv.setTextFilterEnabled(true); 

    lv.setOnItemClickListener(new OnItemClickListener() { 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
      //When clicked show toast 
      Toast.makeText(getApplicationContext(), ((TextView) view).getText(), 
      Toast.LENGTH_SHORT).show(); 
     } 

    }); 

} 
} 

И макет на всякий случай .. (R.layout.dbrowviewer)

<?xml version="1.0" encoding="utf-8"?> 
<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:padding="10dp" 
android:textSize="16sp" > 
</TextView> 

Кроме того, если у кого есть запасной второй, чтобы дать advice..I имеют ошибку с «(TextView) view.getText()» в тосте, в котором говорится, что я не могу отбрасывать из представления в TextView. Быстро изучить его без везения, но Im в настоящее время пытается решить первую и более важную проблему!

Спасибо заранее,

Джош

ответ

4

Во-первых, это код, который я изменен, и он сработал.

lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { 

    @Override 
    public void onItemClick(AdapterView<?> parnet, android.view.View view, 
      int position, long id) { 
     Toast.makeText(getApplicationContext(), ((TextView) view).getText(), 
       Toast.LENGTH_SHORT).show(); 
    } 

}); 

Проблема здесь ваше имя «класс», как вы выбрали «View» в качестве имени класса, который бывает таким же, как android.view.View, так что если вы используете вид как тип второго параметра вашего слушателя, компилятор запутывается.

Мое предложение состоит в том, что вам лучше выбрать другое имя для вашего класса активности.Обычно я использую функциональность активности плюс постфикс «Activity» как имя класса активности, например, если вы хотите отобразить список пользователей, вы можете выбрать UserListActivity, здесь я выбираю «ListActivity» в качестве постфикса, чтобы указать, что активность фактически происходит из ListActivity.

+1

+1 но осторожный ... ListActivity также является классом Android Framework ... –

+0

Большое спасибо за помощь. Я даже не подумал об этом, хотя я уже пробовал немного возиться с «View view». Иногда это просто принимает еще пару глаз ... и, вероятно, гораздо больше знаний и опыта позади них. Приветствует снова. –

+0

@ КрисТомпсон, спасибо, сэр! И действительно не следует использовать голый «ListActivity» в качестве имени деятельности. –

0

Вы можете попробовать добавить:

@Override

выше onItemClick():

lv.setOnItemClickListener(new OnItemClickListener() { 

@Override 
public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
     //When clicked show toast 
     Toast.makeText(getApplicationContext(), ((TextView) view).getText(), 
     Toast.LENGTH_SHORT).show(); 
} 

}); 
+0

Просто покушений на всплеснула новую ошибку для onItemClick заявив: «Метод onItemClick (AdapterView , Вид, INT, длинный) типа new AdapterView.OnItemClickListener() {} должен переопределить метод суперкласса « Cheers. –

0

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