1

嘿,我目前遇到了我正在製作的一個小型Android應用程序的問題。我正在試圖打造的是:爲不同文字視圖使用多個字符串資源

    • 有兩個TextViews(標題和字幕)每行列表界面。
    • 將這些值從兩個單獨的字符串數組資源中抽取出來。

該接口具有在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> 

和字符串資源,

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

應該有兩行標題開始和停止,每個都有相關的標題。我已經使用ArrayAdapter實施這一企圖,

ArrayAdapter listAdapter = ArrayAdapter.createFromResource(this, 
      new int[] {R.array.menuEntryTitles, R.array.menuEntryCaptions}, 
      new int[] {R.id.rowTitle, R.id.rowCaption}); 

,但我得到的錯誤是由於createFromResource需要int爭論時,我只能提供int[]

希望這裏有人能指點我正確的方向。

乾杯

回答

1

一種解決方案是創建自己的適配器,因爲ArrayAdapter只使用一個陣列,而不是兩個。

您可以創建適配器作爲ListActivity中的私有類。嘗試類似的東西(警告:代碼未經測試):

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

你能解釋''和'tracks'用於什麼嗎? – 2011-05-25 16:36:26

+0

對不起,但跟蹤相關的代碼是來自我身邊的複製粘貼錯誤。我現在已經刪除它。你測試過代碼嗎?它解決了你的問題嗎? – jorgenfb 2011-05-26 06:18:46

+0

在啓動時得到一個強制關閉錯誤。幾個調試運行後,我設法讓它工作得很好:)。 Eclipse抱怨了一些必須刪除才能運行的重寫。現在來研究一下這些代碼,以便讓我的頭瞭解正在做什麼來顯示這些項目。非常感謝你。 – 2011-05-26 08:12:32