R.id.myEditText error // попытка todolist - PullRequest
1 голос
/ 04 апреля 2011

Эй, ребята, Я купил книгу разработчиков Android от WROX (разработка приложений для Android 2), а во второй главе у них есть обычный проект списка задач, который, похоже, не работает.

Я скопировал точную строку кода и попытался настроить ее, чтобы она заработала, но следующая строка остается ошибкой, независимо от того, что я делаю.

final EditText myEditText = (EditText) findViewById(R.id.myEditText);

ошибка R.id.myEditText, я добавил ее в файл R.java, но, к счастью, она не хочет работать.

Java-файл для него следующий.


package com.paad.todolist;

import java.util.ArrayList;

import android.app.Activity;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.view.View.OnKeyListener;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.ListView; 

public class ToDoList extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);  
    super.onCreate(savedInstanceState);

    setContentView(R.layout.main);

    ListView myListView = (ListView) findViewById(R.id.myListView);
    final EditText myEditText = (EditText) findViewById(R.id.myEditText);

    final ArrayList<String> todoItems = new ArrayList<String>();

    final ArrayAdapter<String> aa;
    aa = new ArrayAdapter<String>(this,
            android.R.layout.simple_list_item_1, todoItems);

    myListView.setAdapter(aa);

    myEditText.setOnKeyListener(new OnKeyListener() {
        public boolean onKey(View v, int keycode, KeyEvent event) {
            if (event.getAction() == KeyEvent.ACTION_DOWN)
                if (keycode == KeyEvent.KEYCODE_DPAD_CENTER) {
                    todoItems.add(0, myEditText.getText().toString());
                    aa.notifyDataSetChanged();
                    myEditText.setText("");
                    return true;
                }
            return false;
        }
    });
}

}

XML-файл является следующим

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<TextView
    android:id="@+id/myTextView"
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="@string/hello"
    />
<ListView
    android:id="@+id/myListView"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content" 
    />
</LinearLayout>

Есть идеи?

Ответы [ 3 ]

4 голосов
/ 04 апреля 2011

Вы не обновляете свой файл R.java напрямую, он генерируется автоматически при сборке вашего проекта.Проблема в том, что вы не добавили EditText в свой макет:

<EditText
    android:id="@+id/myEditText"
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    />
1 голос
/ 04 апреля 2011

Измените ваш XML-файл, как показано ниже, а затем попробуйте:

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"     android:orientation="vertical"     android:layout_width="fill_parent"     android:layout_height="fill_parent"     > <EditText     android:id="@+id/myEditText"     android:layout_width="fill_parent"      android:layout_height="wrap_content"      android:text="@string/hello"     /> <ListView     android:id="@+id/myListView"     android:layout_width="fill_parent"     android:layout_height="wrap_content"      /> </LinearLayout>
1 голос
/ 04 апреля 2011

Если вы измените

android:id="@+id/myTextView"

до

android:id="@+id/myEditText"

должно работать.

Что происходит под капотом? Когда вы определяете элемент с определенным идентификатором в XML-файле, инструменты Android (вероятно, Eclipse в вашем случае) восстанавливают файл R.java.

R.java никогда не следует редактировать вручную, считайте его исходным файлом, который представляет ваши элементы XML безопасным для типов способом, к которому вы можете обращаться в коде Java.

...