web-dev-qa-db-ja.com

Android xmlファイルからListViewへのstring-array

まず、答えてくれてありがとう! Androidが初めてで、これが私の問題です。

リストビューに文字列配列の値を取得したい。

プログラムは次のコードで正常に機能します。

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*/
            }
        });
    }
}
37
Johnny

への変更

_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_に文字列配列fiがあると仮定します。

おそらくNullPointerExceptionを得たでしょう。 getResources()のアクティビティコンテキストが必要です。 onCreateの中に移動します。

52
Raghunandan

これが私がしたことです。 array.xmlにstring-arrayを作成しました

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

そして、私のXMLレイアウトにlisViewを入れます

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

}

19
Shahid Ghafoor

削除する Android:entries .xmlファイルから&文字列配列を定義します

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

あなたの問題は、コードが作成または他の機能に置かれるべきであるということです。静的変数としてではない

0
user2558461