2016-04-21 3 views
-1

Я использую адаптер массива для заполнения списка из пользовательского ввода. Адаптер массива не будет работать, и это приведет к сбою приложения. Я не знаю, почему это так, и я был бы признателен, если бы кто-нибудь мог объяснить, почему. Ниже мой класс и ошибка, которую я получаю.Адаптер Array не работает правильно

Мой класс

import android.content.Intent; 
import android.os.Bundle; 
import android.app.Activity; 
import android.support.v7.app.AppCompatActivity; 
import android.util.Log; 
import android.view.View; 
import android.widget.ArrayAdapter; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.ListView; 
import android.widget.Toast; 

public class AddScore extends AppCompatActivity { 
    private ListView lv; 
    private EditText player; 
    private EditText description; 
    private EditText winner; 
    private EditText game; 
    private Button btn3; 
    private String TAG = "Hannah"; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_add_score); 
     // MySQLiteHelper db = new MySQLiteHelper(this); 
     lv = (ListView) findViewById(R.id.lv); 
     player = (EditText) findViewById(R.id.player); 
     description = (EditText) findViewById(R.id.description); 
     winner = (EditText) findViewById(R.id.winner); 
     game = (EditText) findViewById(R.id.game); 
     btn3 = (Button) findViewById(R.id.button3); 


     btn3.setOnClickListener(new View.OnClickListener() { 

      @Override 

      public void onClick(View view) { 
       List<String> sLog = new ArrayList<>(); 
       MySQLiteHelper Helper = new MySQLiteHelper(view.getContext()); 
       List sLogs = Helper.getAllScores(); 
       sLog.add(player.getText().toString().trim()); 
       sLog.add(description.getText().toString().trim()); 
       sLog.add(winner.getText().toString().trim()); 
       sLog.add(game.getText().toString().trim()); 


       for (int i = 0; i < sLog.size(); i++) { 
        Score score = new Score(); 
        sLog.add(score.toString()); 
       } 

       //ListView listView = (ListView) findViewById(R.id.lv); 
       ArrayAdapter<String> arrayAdapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, sLog); 
       Log.d(TAG, "**************************"); 
       lv.setAdapter(arrayAdapter); 
       Score score = new Score(); 
       arrayAdapter.add(String.valueOf(score)); 

       Toast.makeText(AddScore.this, "Button Clicked", Toast.LENGTH_SHORT).show(); 

      } 
     }); 


    } 
} 

Ошибка Ошибка: (62, 53) Ошибка: не может вывести аргументы типа для ArrayAdapter <>

ответ

0

Потому что использование только this относится к View.OnClickListener класс не activity класс. И ArrayAdapter<> требует context в качестве первого аргумента, который может быть представлен здесь activity, а не View.OnClickListener.

Так что попробуйте так:

ArrayAdapter<String> arrayAdapter = new ArrayAdapter<>(AddScore.this, android.R.layout.simple_list_item_1, sLog); 
Log.d(TAG, "**************************"); 
lv.setAdapter(arrayAdapter); 
1

Изменить

ArrayAdapter<String> arrayAdapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, sLog); 

в

ArrayAdapter<String> arrayAdapter = new ArrayAdapter<>(getActivity(), android.R.layout.simple_list_item_1, sLog); 

Вам нужно передать контекст. Поскольку это находится внутри замыкания, вам нужно явно указать getActivity(), поскольку this не получит контекста.

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