2016-06-03 5 views
-3

Я смотрю в статье относительно listviews и buttons. Теперь я скопировал код, который он написал. Но, к сожалению, я получаю сообщение об ошибке.Ошибка в скопированном коде

У меня есть activity_main, Child_listview, ListAdapter.java и MainActivity.java. В последнем я получаю error.I поставил ошибки жирного шрифта.

Ошибка 1 говорит: ListAdapter is abstract; не может быть создан

Ошибка 2 говорит: Невозможно решить метод. Я предполагаю это, потому что он ищет метод в неправильном java-файле. Он ищет его в MainAcitivity вместо ListAdapter.

private ListView listView; 
ListAdapter adapter; 
ArrayList<String> dataItems = new ArrayList<String>(); 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    String[] dataArray = getResources().getStringArray(R.array.listdata); 
    List<String> dataTemp = Arrays.asList(dataArray); 
    dataItems.addAll(dataTemp); 
    listView = (ListView) findViewById(R.id.listView); 
    adapter = **new ListAdapter(MainActivity.this, dataItems)**; 
    adapter.**setCustomButtonListner**(MainActivity.this); 
    listView.setAdapter(adapter); 
+0

Не могли бы вы предоставить нам ссылку на ваш источник? – AxelH

+0

http://www.c-sharpcorner.com/UploadFile/9e8439/create-custom-listener-on-button-in-listitem-listview-in-a/ –

+0

вы должны поместить свой логарифм вместо того, чтобы просто сообщать об ошибке – nomad

ответ

1

Если вы держите прокрутки по этой статье, вы узнаете, что он создал эту ListAdapter (который является ужасным именем для пользовательского адаптера)

Вот код своего класса

package com.example.articalonlistiner; 

import java.util.ArrayList; 

import android.content.Context; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.view.ViewGroup; 
import android.widget.ArrayAdapter; 
import android.widget.Button; 
import android.widget.TextView; 

public class ListAdapter extends ArrayAdapter<String> { 
    customButtonListener customListner; 

    public interface customButtonListener { 
     public void onButtonClickListner(int position,String value); 
    } 

    public void setCustomButtonListner(customButtonListener listener) { 
     this.customListner = listener; 
    } 

    private Context context; 
    private ArrayList<String> data = new ArrayList<String>(); 

    public ListAdapter(Context context, ArrayList<String> dataItem) { 
     super(context, R.layout.child_listview, dataItem); 
     this.data = dataItem; 
     this.context = context; 
    } 

    @Override 
    public View getView(final int position, View convertView, ViewGroup parent) { 
     ViewHolder viewHolder; 
     if (convertView == null) { 
      LayoutInflater inflater = LayoutInflater.from(context); 
      convertView = inflater.inflate(R.layout.child_listview, null); 
      viewHolder = new ViewHolder(); 
      viewHolder.text = (TextView) convertView 
        .findViewById(R.id.childTextView); 
      viewHolder.button = (Button) convertView 
        .findViewById(R.id.childButton); 
      convertView.setTag(viewHolder); 
     } else { 
      viewHolder = (ViewHolder) convertView.getTag(); 
     } 
     final String temp = getItem(position); 
     viewHolder.text.setText(temp); 
     viewHolder.button.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       if (customListner != null) { 
        customListner.onButtonClickListner(position,temp); 
       } 

      } 
     }); 

     return convertView; 
    } 

    public class ViewHolder { 
     TextView text; 
     Button button; 
    } 
} 

Это явно недостаток внимания с вашей стороны. Вы не можете скопировать код и надеяться, что он будет работать, если вы не прочитаете все.

EDIT (из приведенных ниже комментариев):

Это также важно, чтобы Сюр, что вы используете правильный ListAdapter. Вам нужно импортировать пользовательский номер ListAdapter, а не тот, который находится в пакете виджета Android.

+1

Это ясно показывает, что вы не прочитали мою заметку выше кода. Где я уже писал, что у меня есть ListAdapter.java, но все еще были ошибки. Я хочу поблагодарить вас за ваш вклад. –

+0

Поскольку ListAdapter явно не абстрактный, либо это не тот же файл, либо вы просто импортировали интерфейс ListAdapter из 'android.widget.ListAdapter'. Удалите импорт ListAdapter, чтобы использовать правильный ListAdapter (выполненный на заказ). Укажите пакет, если он отличается от активности. EDIT: Да, я прочитал ваш вопрос, но имя файла не сообщает мне контент. – AxelH

+0

Ха-ха, я понимаю это сейчас. И я очень ценю ваши усилия, чтобы помочь. Я нахожусь в начале изучения java и android, поэтому у меня есть длинный путь. Я удалил его, и он действительно работает. Большое спасибо. –

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