0
   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
4

7 に答える 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 に答える