Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android string-array from xml file to ListView

First of all, thank you for your answers! I'm new for Android and this is my problem;

I want to take values of string array to listview.

Program works fine with these codes:

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

But I wanna use xml file for string-array. This is my xml file:

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

and I just changed the code with following code, and now program doesn't work.

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

Can you help me to solve this problem? Thank you!

Activity codes:

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*/
            }
        });
    }
}
like image 609
Johnny Avatar asked Nov 09 '13 13:11

Johnny


3 Answers

Change to

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

I assume you have the string array fi in strings.xml.

You probably got NullPointerException. You require activity context for getResources(). So move it inside onCreate.

like image 66
Raghunandan Avatar answered Nov 07 '22 17:11

Raghunandan


here is what I did. i have created a string-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>

and put a lisView in my xml layout

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

here is my MainActivity look like.

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

}

like image 32
Shahid Ghafoor Avatar answered Nov 07 '22 19:11

Shahid Ghafoor


remove android:entries from your .xml file & define the string array into

String[] number = getResources().getStringArray(R.id.numbers);
ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, number);
like image 2
Vijaya Edke Avatar answered Nov 07 '22 17:11

Vijaya Edke