-1

エラー: パブリック タイプの TodoListItemView は、独自のファイルで定義する必要があります。(行: public class TodoListItemView extends TextView {)

    package com.kisinivan.todolist;

import java.util.ArrayList;

import android.os.Bundle;
import android.app.Activity;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.View;
import android.view.View.OnKeyListener;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.ListView;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.widget.TextView;

public class MainActivity extends Activity {

    public void onCreate(Bundle 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_ENTER){
                   todoItems.add(0, myEditText.getText().toString());
                   aa.notifyDataSetChanged();
                   myEditText.setText("");
                   return true;
                 }
               return false;
        } });
        }

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

}

public class TodoListItemView extends TextView {
      public TodoListItemView (Context context, AttributeSet ats, int ds) {
        super(context, ats, ds);
        init();
    }
      public TodoListItemView (Context context) {
        super(context);
        init();
    }
      public TodoListItemView (Context context, AttributeSet attrs) {
        super(context, attrs);
        init();
    }
      private void init() {
      }
      @Override
      public void onDraw(Canvas canvas) {
        super.onDraw(canvas);
      }
    }
4

3 に答える 3

3

Eclipse はオプションの(しかし非常に一般的な) 制限を適用しています。Java 言語仕様のセクション 7.6から:

パッケージがファイル システム (§7.2) に格納されている場合に限り、ホスト システムは、型名で構成される名前のファイルに型が見つからない場合、コンパイル時エラーであるという制限を適用することを選択できます。次のいずれかに該当する場合は、拡張子 (.java または .jav など) を追加します。

  • 型は、型が宣言されているパッケージの他のコンパイル単位のコードによって参照されます。

  • この型は public と宣言されています (したがって、他のパッケージのコードからアクセスできる可能性があります)。

修正は簡単です...次のいずれかです。

  • クラスを非公開にする
  • ネストされたタイプにする(例:内MainActivity
  • クラスの名前と一致する名前で独自のファイルに入れます

ネストするつもりがない限り、非公開にしても、それを独自のファイルに移動します。

于 2013-01-16T18:07:56.047 に答える
0

Eclipse は、独自のファイルがない限り、クラスを作成することを好みません。TodoListItemView という別のファイルを作成し、そこにクラスを配置します。または、クラスを 1 つのアクティビティでのみ使用している場合は、代わりにプライベートにすることもできます。

Jon skeetのおかげで、あなたもこれを行うことができることがわかりました

public クラスが必要な場合でも、アクティビティ内に配置することで作成できます

于 2013-01-16T18:05:21.917 に答える
0

異なるクラスは、独自のファイルで定義する必要があります。同じファイルで 2 つのクラスを定義しても機能しません。

于 2013-01-16T18:06:02.717 に答える