public class MainActivity extends Activity {
private static final String[] lakes = { "Superior","Victoria","Huron","lakhani","sagar","surat","pune","gujarat",
"baroda","jayesh","mahesh","suresh","chirag","laptop"};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ListView listView = (ListView)findViewById(R.id.listView);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, lakes);
listView.setAdapter(adapter);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
AlertDialog.Builder abd = new AlertDialog.Builder(MainActivity.this);
abd.setTitle("selected item");
abd.setMessage("selected item is=" + listView.getItemAtPosition(View.SCROLLBAR_POSITION_DEFAULT));
abd.setPositiveButton("Ok", null);
abd.show();
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
this error diaplay
Gradle: local variable listView is accessed from within inner class; needs to be declared final
質問する
1114 次
7 に答える
0
関数
ListView listView = (ListView)findViewById(R.id.listView);
内の最後のスコープ 。onCreate
したがって、関数が呼び出されるたびにonCreate(savedInstanceState)
、 listView オブジェクトが作成され、 function から値が設定されます(ListView)findViewById(R.id.listView)
。
しかし、関数の最後でオブジェクトは
listView
分解され、クラス内の他の場所には変数がありません。
onCreate
関数の外側とクラスMainActivityの内側に変数を作成すると、問題は解決します
変数のスコープについての理解を深めるために、これを読んでみてください
于 2013-08-21T06:09:23.647 に答える
0
これは機能するはずです
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
Object s=adapterView.getItemAtPosition(i);
final String selectedItem=s.toString();
AlertDialog.Builder abd = new AlertDialog.Builder(MainActivity.this);
abd.setTitle("selected item");
abd.setMessage("selected item is=" + selectedItem);
abd.setPositiveButton("Ok", null);
abd.show();
}
});
}
于 2013-08-21T06:19:56.400 に答える
0
これを試して..
private static final String[] lakes = { "Superior","Victoria","Huron","lakhani","sagar","surat","pune","gujarat",
"baroda","jayesh","mahesh","suresh","chirag","laptop"};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final ListView listView = (ListView)findViewById(R.id.listView);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, lakes);
listView.setAdapter(adapter);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
AlertDialog.Builder abd = new AlertDialog.Builder(MainActivity.this);
abd.setTitle("selected item");
abd.setMessage("selected item is=" + listView.getItemAtPosition(i));
abd.setPositiveButton("Ok", null);
abd.show();
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
于 2013-08-21T05:52:34.897 に答える