2013-11-09 29 views
33

首先,謝謝你的回答!我是Android新手,這是我的問題;android string-array從xml文件到ListView

我想將字符串數組的值傳遞給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文件。這是我的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*/ 
      } 
     }); 
    } 
} 
+0

你可以張貼活動代碼完全和你在哪裏有這樣的'字符串[] = fiilliste 。getResources()getStringArray(R.array.fi);'? – Raghunandan

+0

立即查看我的帖子並試試 – Raghunandan

回答

49

更改爲

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 

我假設你有strings.xml字符串數組網絡連接。

您可能得到了NullPointerException。您需要getResources()的活動環境。所以把它移到onCreate之內。

+1

非常感謝!現在它工作了! – Johnny

0

你的問題是代碼應放在上創建或任何其他功能。還不如靜態變量

+0

代碼中沒有靜態變量 – Raghunandan

+0

我的意思是運行時沒有得到該值 – user2558461

16

這是我做的。我已經在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(); 
} 

}

1

刪除android:entries從.xml文件&定義字符串數組到

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