开发者

Using multiple string resources for different textviews

Hey, I'm currently having trouble with a small Android application I'm making. What I'm attempting to build is:

  • A list interface with
    • Each row having two TextViews (a title and a caption).
    • Have the values of these to be drawn from two separate string array resources.

The interface has the following text views in rowLayout.xml,

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content" android:orientation="vertical">

<TextView android:text="@+id/rowTitle"
          android:layout_height="wrap_content"
          android:id="@+id/title"
          android:textSize="25px"
          android:layout_width="match_parent">
</TextView>

<TextView android:text="@+id/rowCaption"
          android:layout_height="wrap_content"
          android:id="@+id/caption"
          android:textSize="25px"
          android:layout_width="match_parent">
</TextView>

and the string resources are,

<string-array name="menuEntryTitles">
    <item>Start</item>
    <item>Stop</item>
</string-array>

<string-array name="menuEntryCaptions">
    <item>Starts the update listener service.</item>
    <item>Stops the update listener service.</item>
</string-array>

There should be two rows titled Start and Stop and each has their relevant captions. I've attempted using an ArrayAdapter to implement this,

ArrayAdapter listAdapter = ArrayAdapter.createFromResource(this,
             new int[] {R.array.menuEntryTitles, R.array.menuEntryCaptions},
       开发者_JS百科      new int[] {R.id.rowTitle, R.id.rowCaption});

but I'm getting errors due to createFromResource requiring int arguments when I can only provide int[].

Hope someone here can point me in the right direction.

Cheers


One solution is to create your own adapter since ArrayAdapter only uses one array, and not two.

You can create the adapter as a private class within you ListActivity. Try something like this (warning: code not tested):

public class MyListActivity extends ListActivity {
    protected void onCreate(){

        ....

        // Get arrays from resources
        Resources r = getResources();    
        String [] arr1 = r.getStringArray("menuEntryTitles");
        String [] arr1 = r.getStringArray("menuEntryCaptions");

        // Create your adapter
        MyAdapter adapter = new MyAdapter(arr1, arr2);

        setListAdapter(adapter);
    }

    private class MyAdapter extends BaseAdapter {
        private LayoutInflater inflater;

        String [] arr1;
        String [] arr2;

        public MyAdapter(String[] arr1, String[] arr2){
            inflater = (LayoutInflater)MyListActivity.this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

            this.arr1 = arr1;
            this.arr2 = arr2;
        }

        @Override
        public int getCount() {
            return arr1.length;
        }

        @Override
        public Object getItem(int position) {
            return null;
        }

        @Override
        public long getItemId(int position) {
            return 0;
        }

        // Used to keep references to your views, optimizes scrolling in list
        private static class ViewHolder {
             TextView tv1;
             TextView tv2;
        }


        @Override
        public View getView(int position, View convertView, ViewGroup parent) {

            ViewHolder holder;
            if (convertView == null){
                convertView = inflater.inflate(R.layout.row_layout, null);

                // Creates a ViewHolder and store references to the two children views
                // we want to bind data to.
                holder = new ViewHolder();
                holder.tv1 = (TextView) convertView.findViewById(R.id.rowTitle);
                holder.tv2 = (TextView) convertView.findViewById(R.id.rowCaption);

                convertView.setTag(holder);
            } else {
                holder = (ViewHolder)convertView.getTag();
            }

            holder.tv1.setText(arr1[position]);
            holder.tv2.setText(arr2[position]);

            return convertView;
        }
    }
}
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜