1

このコードで、私のプログラムは単にclose(エラー)を強制します

***public View x = findViewById(R.string.nfoname);***
@Override
public void onCreate(Bundle savedInstanceState) {    
super.onCreate(savedInstanceState);    
setContentView(R.layout.information);
//edittext
***final EditText infoname=(EditText)findViewById(R.id.infoname);***

//clear,confirm
Button clear = (Button)findViewById(R.id.buttonclear);
Button confirm = (Button)findViewById(R.id.buttonconfirm);

//clear button
clear.setOnClickListener(new View.OnClickListener() {       
    public void onClick(View v) {
        // TODO Auto-generated method stub
        infoname.setText("");
    }
});
//confirm button
confirm.setOnClickListener(new View.OnClickListener() {     
    public void onClick(View v) {

        ***x=(View) infoname.getText();***
    }
});
}

*が付いているものがエラーの原因です

プログラム機能:ユーザーが[確認]をクリックすると、ユーザーの名前がR.string.nfonameに設定され、TextView x = setText(R.string.nfoname);を介して別のレイアウトで使用されます。

4

4 に答える 4

2

テキストをR.stringに保存できるかどうかわかりません。これは、コンパイラが自動的に作成する生成されたクラスです。それはあなたのapkと一緒にパッケージ化されます。リソースを翻訳の手段として考え、画面にテキストを表示します。

あなたがやりたいことは、ユーザー入力をSharedPreferenceとしてまたはデータベースに保存することだと思います。

使用例については、AndroidドキュメントのSharedPreferencesを参照してください。

于 2012-01-17T01:34:44.547 に答える
0

少なくとも変数infonameのスコープの場合、アプリケーションがエラーをスローする可能性があります。infonameは、関数onCreate()のローカル変数であり、クラスのインスタンス変数ではありません。したがって、匿名クラスの一部であるため、onClick()メソッドからアクセスすることはできません。

もう1つ質問したいのは、なぜinfonameをfinalとしてマークしたのですか?onCreate()が終了するとスコープ外になるため、変更された場合は、メソッドの実行中にのみ存在するため、誰が変更したかを確認できます。

于 2012-01-17T01:37:42.577 に答える
0

値をR.string.xxxに設定することはできません。これらの値はすべて、読み取り専用のものとよく似た定数になるためです。編集テキストの値を別のレイアウトに使用する場合は、クラス変数を使用するか、intent.putextra()

ソースコードに来ると私はこれを見る

public View x = findViewById(R.string.nfoname);

R.Stringでビューを見つけるにはどうすればよいですか?これはR.idである必要があります。

最終的なEditTextinfoname=(EditText)findViewById(R.id.infoname); なぜこのeditTextは最終的なものでなければならないのですか?

***x=(View) infoname.getText();***

infoname.getText().toString()Edittextの現在のテキストの文字列値を取得するために使用するだけです。おい、あなたは簡単に何かをすることができます。

于 2012-01-17T01:43:41.557 に答える
0
public View x = findViewById(R.string.nfoname);

これは、リソースIDViewを使用して検索しようとしているだけでなく、メソッドで呼び出される前に実行しているため、機能しません。そのような有効なリソースIDを使用した場合でも、コンテンツビューがまだ拡張されていないためになります。R.stringsetContenView(...)onCreate(...)ViewR.id.infonamexnull

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

これを無意味に使用することは別として、実際にのリソースIDであるfinal限り、問題を引き起こすことはありません。R.id.infonameEditText

x=(View) infoname.getText();

xになるだけでなく、リターンnullを呼び出すこともできません。また、にキャストすることもできません。からテキストを取得する正しい方法を使用したとしても、をにキャストすることはできません。getText()EditTextEditableViewViewgetText().toString()EditTextStringView

また、これは...

TextView x = setText(R.string.nfoname);

それはしなければならないでしょう...

TextView x = (TextView) findViewById(<some id>);
x.setText(getString(R.string.nfoname));
于 2012-01-17T01:53:49.543 に答える