Это будет хотеть вас хотеть и избегать столкновений
статическая строка SanitiseFilename (строковый ключ) {var invalidChars = Path.GetInvalidFileNameChars (); var sb = new StringBuilder (); foreach (var c in key) {var invalidCharIndex = -1; for (var i = 0; i & lt; invalidChars.Length; i ++) {if (c == invalidChars [i]) {invalidCharIndex = i; }} if (invalidCharIndex & gt; -1) {sb.Append ("_"). Добавить (invalidCharIndex); Продолжать; } if (c == '_') {sb.Append ("__"); Продолжать; } sb.Append (c); } return sb.ToString (); }
Атрибут ArrayAdapter требует, чтобы идентификатор ресурса был исключением TextView XML , поэтому вы не предоставляете то, что ожидает ArrayAdapter
. Когда вы используете этот конструктор:
new ArrayAdapter<String>(this, R.layout.a_layout_file, this.file)
R.Layout.a_layout_file
должен быть идентификатором файла макета xml, содержащего только TextView
(TextView
нельзя обернуть другим макетом, например, LinearLayout
, RelativeLayout
и т. д.), что-то вроде этого:
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
// other attributes of the TextView
/>
Если вы хотите, чтобы ваш макет строки списка был чем-то другим, тогда простой виджет TextView
использует этот конструктор:
new ArrayAdapter<String>(this, R.layout.a_layout_file,
R.id.the_id_of_a_textview_from_the_layout, this.file)
, где вы снабжаете id
макета, который может содержать различные виды, но также должен содержать TextView
с и id
(третий параметр), который вы передаете вашему ArrayAdapter
, поэтому он может знать, куда поместить Strings
в макет строки.
Если вы получаете это сообщение, когда расширяете ArrayAdapter, вы получаете эту ошибку, потому что вы не указали правильный идентификатор ресурса для отображения элемента. Вызовите суперкласс в конструкторе и передайте идентификатор ресурса TextView:
//Pass in the resource id: R.id.text_view
SpinnerAdapter spinnerAddToListAdapter = new SpinnerAdapter(MyActivity.this,
R.id.text_view,
new ArrayList<>());
Адаптер:
public class SpinnerAdapter extends ArrayAdapter<MyEntity> {
private Context context;
private List<MyEntity> values;
public SpinnerAdapter(Context context, int textViewResourceId,
List<MyEntity> values) {
//Pass in the resource id: R.id.text_view
super(context, textViewResourceId, values);
this.context = context;
this.values = values;
}
Сутион здесь
listitem.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/textview"
android:layout_width="match_parent"
android:layout_height="match_parent" >
</TextView>
</LinearLayout>
Код Java:
String[] countryArray = {"India", "Pakistan", "USA", "UK"};
ArrayAdapter adapter = new ArrayAdapter<String>(this, R.layout.listitem,R.id.textview, countryArray);
ListView listView = (ListView) findViewById(R.id.listview);
listView.setAdapter(adapter);
new ArrayAdapter<String>(this, R.layout.a_layout_file, R.id.a_text_view_within_layout, this.file)
См. Javadoc дляandroid.widget.ArrayAdapter
– Petr Gladkikh 18 April 2013 в 03:34