2013-11-09 17 views
33

Prima di tutto, grazie per le vostre risposte! Sono nuovo per Android e questo è il mio problema;Array di stringhe Android da file xml a ListView

Voglio prendere i valori dell'array di stringhe in listview.

programma funziona bene con questi codici:

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

Ma io voglio file xml uso per la stringa-array. Questo è il mio file 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> 

e ho appena cambiato il codice con il seguente codice, e ora il programma non funziona.

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

Potete aiutarmi a risolvere questo problema? Grazie!

codici di attività:

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

puoi pubblicare il codice piena attività e dove avete questo 'String [] fiilliste = . getResources() getStringArray (R.array.fi); '? – Raghunandan

+0

controlla il mio post ora e prova – Raghunandan

risposta

49

Scelgo

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 

suppongo avete la fi array di stringhe in strings.xml.

Probabilmente hai NullPointerException. È necessario il contesto di attività per getResources(). Quindi spostalo all'interno di onCreate.

+1

Grazie mille! Ora funziona! – Johnny

0

Il tuo problema è che il codice dovrebbe essere messo in su creare o qualsiasi altra funzione. Non come variabile statica

+0

non ci sono variabili statiche nel codice postato – Raghunandan

+0

Intendevo che il valore non arriva in runtime – user2558461

16

ecco cosa ho fatto. ho creato una stringa-array in 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> 

e mettere un lisView nel mio layout 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" /> 

Ecco il mio MainActivity simile.

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

}

1

rimuovere android:entries dal file .xml & definire la matrice di stringhe in

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