2013-08-21 2 views
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 
+0

попытайтесь объявить listview выше onCreate(). – Shrikant

+0

объявить listview как член класса и получить строку 'String s = (String) adapterView.getItemAtPosition (i)' – Raghunandan

+0

изменить 'ListView listView = (ListView) findViewById (R.id.listView);' to 'final ListView listView = (ListView) findViewById (R.id.listView); '.Это потому, что вы обращаетесь к локальной переменной внутри анонимного прослушивателя и получаете доступ к переменной внутри анонимного определения, вы должны сделать ее «final» – thegiga

ответ

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; 
    } 
0

Вы имеете два опцию- Сделать ListView

регионом в мире
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); 
0

попробуйте этот код

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

Либо вы меняете listview dec бъявлению для этого:

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

или объявить 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); 
0

Вы можете объявить ListView как член класса, то внутри на 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(); 
0

Сфера действия ListView listView = (ListView)findViewById(R.id.listView); конца внутри функции onCreate .

Таким образом, каждый раз, когда функция onCreate(savedInstanceState) называется ваш объект ListView создается и значения устанавливаются в него из функции (ListView)findViewById(R.id.listView).

Но на конце функции объект растворен и вы будете не быть с переменной listView где-нибудь еще в классе.

Проблема решается при создании переменной вне функции onCreate и внутри класса MainActivity

Попробуйте прочитать это для большего понимания о scope of a variable

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(); 
       } 
      }); 
     } 
Смежные вопросы