2013-03-02 2 views
0

Итак, у меня проблемы с созданием приложения (закрытие силы), и я думаю, что это связано с тем, как я реализовал макет. Итак, несколько вопросов: во-первых, у меня есть относительный макет, который включает в себя текстовый ввод с кнопкой рядом с ним, просмотр списка (все еще в относительном макете) и еще одну кнопку ниже этого. Это мой основной XML файл:Просмотров Android в макетах

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:id="@+id/RelativeLayout1" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="horizontal" > 

<EditText 
    android:id="@+id/edit_choice" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignBaseline="@+id/Button1" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentTop="true" 
    android:layout_toLeftOf="@+id/Button1" 
    android:hint="@string/edit_choice" /> 

<Button 
    android:id="@+id/Button1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentRight="true" 
    android:layout_alignParentTop="true" 
    android:onClick="addString" 
    android:text="@string/button_add" /> 

<Button 
    android:id="@+id/Button2" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentBottom="true" 
    android:layout_centerHorizontal="true" 
    android:layout_marginBottom="22dp" 
    android:text="@string/button_random" /> 


<ListView 
    android:id="@+id/listView1" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_above="@+id/Button2" 
    android:layout_alignParentLeft="true" 
    android:layout_below="@+id/Button1" 
    tools:listitem="@android:layout/simple_list_item_1" > 
</ListView> 

</RelativeLayout> 

Прежде, чем я даже изменил что-нибудь в файлах .java, когда я попытался запустить это, только появились ввод текста и 2 кнопки и тема изменена с Хол на Хол свет. Поэтому мне интересно, работает ли это, я видел только примеры, когда представление списка полностью совпадает с родительским макетом.

Мой второй вопрос заключается в том, как я могу обработать использование ввода для добавления значений в представление списка, могу ли я сделать это в основном классе активности или у меня есть другой класс для обработки представления списка и по-прежнему ссылаться на основной макет.

Это мой Основной класс:

public class MainActivity extends Activity 
{ 

public ArrayList <String> choices = new ArrayList <String>(); 
public ListView listView = (ListView) findViewById(R.id.listView1); 
public String [] choicesArray; 


@Override 
public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    ListView listView = (ListView) findViewById(R.id.listView1); 
    choicesArray = new String [] {"You have not entered a choice yet"}; 
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, 
      android.R.layout.simple_list_item_1, android.R.id.text1, choicesArray); 
    listView.setAdapter(adapter); 

} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) 
{ 
    getMenuInflater().inflate(R.menu.activity_main, menu); 
    return true; 
} 

//adds the string to the list 
public void addString(View view) 
{ 

    choicesArray = (String[]) choices.toArray(); 
    EditText editText = (EditText) findViewById(R.id.edit_choice); 
    String message = editText.getText().toString(); 
    choices.add(message); 

} 


} 

Надеется, что это имеет смысл и спасибо за любую помощь.

+0

Можете ли вы опубликовать лог-кошку силы? –

ответ

1

Проблема это вы вызываете эту линию

public ListView listView = (ListView) findViewById(R.id.listView1); 

перед установкой представление содержимого по setContentView() метод в OnCreate(), так что вы получаете NullPointerException. Не забывайте, что перед вызовом findViewById вам нужно установить просмотр содержимого. Поэтому удалите строку выше, потому что вы создаете функцию scopeViewView в методе onCreate и ваша проблема NullPointerException будет решена. А также измените первую строку метода addString следующим образом:

choicesArray = choices.toArray(choicesArray); 
+0

Я даже не понял, что у меня было это заявление дважды. Спасибо! –

1
  1. Определите свой ArrayAdapter как член для вашего класса (не как переменную in onCreate()).
  2. Установите адаптер в свой списокView в onCreate().
  3. Установите кнопку onClickListener для вашей кнопки.
  4. Добавить текст с EditText на ваш адаптер, когда вы нажмете на кнопку .
  5. Прибыль!