Строковый массив Android из xml-файла в ListView

Прежде всего, спасибо за ваши ответы! Я новичок в Android, и это моя проблема;

Я хочу принимать значения строкового массива в listview.

Программа отлично работает с этими кодами:

private String [] fiilliste={"A","Ağlamak","Almak","B","Bulmak"}; ArrayAdapter<String> adapter; adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, fiilliste); vlist.setAdapter(adapter); 

Но я хочу использовать xml-файл для string-массива. Это мой xml-файл:

 <?xml version="1.0" encoding="utf-8"?> <resources> <string-array name="fi"> <item>A</item> <item>Almak</item> <item>Anlamak</item> <item>Anlasmak</item> <item>Anlatmak</item> <item>Ayrilmak</item> </string-array> </resources> 

И я просто изменил код с помощью следующего кода, и теперь программа не работает.

 String [] fiilliste= getResources().getStringArray(R.array.fi); 

Можете ли вы помочь мне решить эту проблему? Спасибо!

Коды действий:

 package com.gazi.tezproje; import android.app.ActionBar; import android.app.Activity; import android.os.Bundle; import android.text.Editable; import android.text.TextWatcher; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.ArrayAdapter; import android.widget.EditText; import android.widget.ImageButton; import android.widget.ListView; import android.widget.Toast; public class verbs extends Activity { public boolean onCreateOptionsMenu(Menu menu) { ActionBar bar=getActionBar(); bar.setDisplayHomeAsUpEnabled(true); MenuInflater menu1 = getMenuInflater(); menu1.inflate(R.menu.info, menu); return super.onCreateOptionsMenu(menu); } public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.menuinfo: Toast.makeText(getApplicationContext(),getString(R.string.verbs), Toast.LENGTH_LONG).show(); break; case android.R.id.home: finish(); break; } return false;} private ListView vlist; EditText ara; String [] fiilliste= getResources().getStringArray(R.array.fi); ArrayAdapter<String> adapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.verbs); vlist=(ListView)findViewById(R.id.listView1); adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, fiilliste); vlist.setAdapter(adapter); ara = (EditText) findViewById(R.id.editText1); vlist.setTextFilterEnabled(true); ara.addTextChangedListener(new TextWatcher(){ public void onTextChanged(CharSequence cs, int arg1, int arg2, int arg3) { // When user changed the Text verbs.this.adapter.getFilter().filter(cs); } @Override public void afterTextChanged(Editable arg0) { // TODO Auto-generated method stub } @Override public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) { // TODO Auto-generated method stub } }); } } 

Изменить на

 String [] fiilliste; ArrayAdapter<String> adapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.verbs); fiilliste = getResources().getStringArray(R.array.fi); // move this in onCreate 

Я предполагаю, что у вас есть строковый массив fi в strings.xml .

Вероятно, вы получили NullPointerException . Для getResources() требуется контекст активности. Поэтому переместите его внутри onCreate .

Вот что я сделал. Я создал массив строк в array.xml

  <resources> <string-array name="numbers"> <item>1</item> <item>2</item> <item>3</item> <item>4</item> <item>5</item> <item>6</item> <item>7</item> <item>8</item> <item>9</item> <item>10</item> </string-array> 

И поместите lisView в мой xml-макет

  <ListView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/listView" android:entries="@array/numbers" android:layout_alignParentTop="true" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" /> 

Вот моя MainActivity.

 public class MainActivity extends AppCompatActivity implements AdapterView.OnItemClickListener { ListView listView; String[] number; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); number = getResources().getStringArray(R.array.numbers); listView = (ListView) findViewById(R.id.listView); ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, number); listView.setAdapter(adapter); listView.setOnItemClickListener(this); } @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { TextView textView = (TextView) view; Toast.makeText(this, textView.getText() , Toast.LENGTH_SHORT).show(); } 

}

Ваша проблема заключается в том, что код должен быть введен для создания или любой другой функции. Не как статическая переменная

Удалить android:entries из вашего .xml-файла и определить массив строк в

 String[] number = getResources().getStringArray(R.id.numbers); ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, number);