Понимание stacktrace без строки из моего приложения [дубликат]

Это будет хотеть вас хотеть и избегать столкновений

  статическая строка 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 ();  }  
149
задан Luksprog 4 November 2012 в 18:23
поделиться

3 ответа

Атрибут 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 в макет строки.

378
ответ дан Luksprog 16 August 2018 в 10:49
поделиться
  • 1
    Имела та же проблема, потому что мой TextView находился внутри LinearLayout в XML-файле. – Valentin Despa 18 November 2012 в 12:55
  • 2
    Пробовал это в раскрывающемся списке автозаполнения, но он не позволял прокручивать и не позволял мне выбирать любой элемент из списка – kabuto178 31 January 2013 в 22:01
  • 3
    TextView может быть обернут в другой макет (я просто сделал это). Для этого используйте другой конструктор 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
  • 4
    Вы не очень хорошо читали мой ответ: Когда вы используете , этот конструктор : ... (TextView не может быть обернут другим макетом, например LinearLayout, RelativeLayout и т. Д.!) . Его можно обернуть тем, что вы хотите, со второй версией конструктора, которая также принимает идентификатор (как я упоминал во второй части моего ответа). – Luksprog 18 April 2013 в 07:17
  • 5
    Спасибо огромное! Я провел три часа, ударяя головой о стену. В других ссылках говорилось, что у вас может быть только ОДИН TextView, но я не мог найти все важные требования к «TextView» не может быть обернут другим макетом, например LinearLayout. & Quot; Уфф, snip snip, и это работает как шарм. Опять же, спасибо! – Scott Biggs 21 August 2013 в 03:46

Если вы получаете это сообщение, когда расширяете 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;
    }
0
ответ дан 40-Love 16 August 2018 в 10:49
поделиться

Сутион здесь

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);
26
ответ дан Jean 16 August 2018 в 10:49
поделиться
  • 1
    Я знаю, что это похоже на то, что это не должно быть проблемой, но, глядя на документацию для конструкторов ArrayAdapter, я тоже помог мне. ссылка – luckyging3r 20 March 2016 в 05:59
Другие вопросы по тегам:

Похожие вопросы: