![](/img/trans.png)
[英]android UnsupportedOperationException in ArrayAdapter<String>
[英]Android simple ArrayAdapter from String[]
我可以從類結構編寫簡單的數組適配器,但現在我想從字符串編寫簡單的數組適配器,在我的應用程序中,我有簡單的數組:
private String[] panelNumbers;
panelNumbers = G.getActiveUserInfo().phoneNumbers.split(",");
為了將此數組顯示到 Listview 中,數組項與 RadioButton 合並,我的 xml 布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#ffffff"
android:orientation="vertical" >
<RadioButton
android:id="@+id/radio1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:checkMark="@android:drawable/btn_radio"
android:gravity="right|center_vertical"
android:text="xcgdf"
android:textColor="@color/black_text" />
<TextView
android:id="@+id/text1"
android:layout_width="fill_parent"
android:layout_height="1dp"
android:background="@drawable/gradient_divider"
android:text="Medium Text"
android:textAppearance="?android:attr/textAppearanceMedium" />
</LinearLayout>
現在我想通過自定義數組適配器填充這個數組項我的 ArrayAdapter 不正確
我的陣列適配器
public class AdapterSmsPanelNumbers extends ArrayAdapter<String[]> {
public AdapterSlideMenuSMS(String[] array) {
super(G.context, R.layout.call_list, array);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
convertView = G.inflater.inflate(R.layout.single_choice, parent, false);
holder = new ViewHolder(convertView);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.text.setText(array[position]);
return convertView;
}
private static class ViewHolder {
private final TextView text;
private final RadioButton radio;
public ViewHolder(View view) {
text = (TextView) view.findViewById(R.id.text1);
radio = (RadioButton) view.findViewById(R.id.radio1);
}
}
}
問題我無法通過單個 String[] 填充列表視圖項,我不想從 panelNumbers 創建類,請幫助我解決此類問題以使簡單的 ArrayAdapter 顯示簡單的數組
必須首先理解Adapter
概念。 它需要一個對象數組(或列表),因此對於它在其中找到的每個項目,它將生成一個View
(在需要時)。
在這里,如果您想使用String
數組,您必須告訴ArrayAdapter
它將處理String
s,使用:
public class AdapterSmsPanelNumbers extends ArrayAdapter<String>
ArrayAdapter
已經有一個機制來處理你將給他的這些String
。 一種方法可以輕松獲取提供的數組中的項目:
String stringAtPosition = getItem(position);
所以,正如@SorryForMyEnglish 建議的那樣:
public class AdapterSmsPanelNumbers extends ArrayAdapter<String> {
public AdapterSlideMenuSMS(Context context, String[] array) {
super(context, 0, array);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
convertView = LayoutInflater.from(getContext()).inflate(R.layout.single_choice, parent, false);
holder = new ViewHolder(convertView);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.text.setText(getItem(position));
return convertView;
}
private static class ViewHolder {
private final TextView text;
private final RadioButton radio;
public ViewHolder(View view) {
text = (TextView) view.findViewById(R.id.text1);
radio = (RadioButton) view.findViewById(R.id.radio1);
}
}
}
然后在您的Activity
,您可以使用此自定義ArrayAdapter
:
private String[] panelNumbers;
panelNumbers = G.getActiveUserInfo().phoneNumbers.split(",");
ArrayAdapter adapter = new AdapterSmsPanelNumbers(this, panelNumbers);
listView.setAdapter(adapter);
對於看到問題並且只想知道如何從以編程方式創建的字符串列表而不是字符串資源創建數組適配器的人,您只需要做
String[] myStringArray = (String[]) myArrayListOfStrings.toArray();
ArrayAdapter<CharSequence> myAdapter = new ArrayAdapter(getContext(), R.layout.my_layout, myStringArray);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.