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;
 @Override
 protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    listView = (ListView)findViewById(R.id.listView);

或者让它成为最终的

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

final ListView listView = (ListView)findViewById(R.id.listView);
于 2013-08-21T05:50:16.310 回答
0

试试这个代码

final ListView listView = (ListView)findViewById(R.id.listView);
于 2013-08-21T05:50:36.083 回答
0

您可以为此更改 listview 声明:

final ListView listView = (ListView)findViewById(R.id.listView);

或者您在 onCreate 方法之外声明列表视图。

private ListView listView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        listView = (ListView)findViewById(R.id.listView);
于 2013-08-21T05:50:47.137 回答
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 回答
0

您可以将您的列表视图声明为类成员,然后在 itemclick 内部

        String s = (String) adapterView.getItemAtPosition(i);

使用字符串在对话框中显示它。

    AlertDialog.Builder abd = new AlertDialog.Builder(MainActivity.this);
    abd.setTitle("selected item");
    abd.setMessage("selected item is=" + s);
    abd.setPositiveButton("Ok", null);
    abd.show();

如果您想在吐司中显示它。

 Toast.makeText(MainActivity.this,s,Toast.LENGTH_SHORT).show();
于 2013-08-21T05:55:19.937 回答
0

函数ListView listView = (ListView)findViewById(R.id.listView);内部结束的作用域 。onCreate

因此,每次onCreate(savedInstanceState)调用该函数时,都会创建您的 listView 对象,并从该函数为其设置值(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 回答