2013-04-19 9 views
1

У меня есть представление списка с тремя элементами, я хочу перейти к новому действию в зависимости от щелчка элемента, то есть каждый элемент при нажатии должен перейти к другому действию , Я попробовал решение, которое были даны аналогичные проблемы, но я до сих пор не понять, как сделать его на другой вид деятельности, переходя к определенному действию при щелчке элемента списка.

package com.example.wizer; 

import java.util.ArrayList; 

import android.app.Activity; 
import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.content.IntentFilter; 
import android.net.wifi.WifiManager; 
import android.os.Bundle; 
import android.view.Menu; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.AdapterView.OnItemClickListener; 
import android.widget.ArrayAdapter; 
import android.widget.ListView; 

public class Options extends Activity implements OnItemClickListener { 

    WifiManager wifi; 
    BroadcastReceiver receiver; 
    IntentFilter filter; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_options); 
     wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE); 
     filter = new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION); 


     registerReceiver(rcver, filter); 

     ListView list = (ListView) findViewById(R.id.l1); 

     ArrayList <String> List = new ArrayList <String>(); 
     List.add("List available networks ."); 
     List.add("List APs ."); 
     List.add("List Networks according to thier signal strength ."); 

     ArrayAdapter <String> adp = new ArrayAdapter <String> (this, android.R.layout.simple_list_item_1, List); 
     list.setAdapter(adp); 

     wifi.startScan(); 
    } 

    // On create 
    final BroadcastReceiver rcver = new BroadcastReceiver() { 

     @Override 
     public void onReceive(Context context, Intent intent) { 

     }; 

    }; 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.activity_options, menu); 
     return true; 
    } 

    public void onItemClick(AdapterView <? > arg0, View arg1, int arg2, long arg3) { 
     // TODO Auto-generated method stub 
     if (arg3 == 0) { 
      Intent NL = new Intent(Options.this, Networks.class); 
      startActivity(NL); 

     } else if (arg3 == 1) { 

      Intent NL = new Intent(Options.this, AP.class); 
      startActivity(NL); 



     } else if (arg3 == 2) { 
      Intent NL = new Intent(Options.this, Signal.class); 
      startActivity(NL); 
     } 
    } 

} 

ответ

0

Вот ответ: я должен был добавить это после объявления списка

list.setOnItemClickListener(this); 
1
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { 

Эта линия даст вам номер строки и ссылку на представление для этой конкретной ячейки. В вашем представлении вы можете добавить свойство с классом, чтобы впоследствии открыть эту активность. Для этого потребуется специальный класс вида и пользовательский адаптер.

В качестве альтернативы, если ваш список будет прост, вы можете создать массив классов, соответствующих порядку строк.

Class[] classes = new Class[2]; 
     classes[0] = Integer.class; 
     classes[1] = View.class; 

Тогда вы можете просто использовать номер строки, чтобы получить правильную ссылку на класс.

+0

Извините, но я совершенно новый, вы можете объяснить дальше? где я должен добавить класс? какой параметр является номером строки? Если в моем списке содержится 3 элемента, строки элементов '0,1,2? – Alaa

+0

Вы переданы в идентификаторе строки в слушателе onItemClick. Используйте это как классы примера индекса массива [row]. http://developer.android.com/reference/android/widget/AdapterView.OnItemClickListener.html. Ответ Прагняни тоже хорош. – munch1324

+0

У меня есть три элемента, поэтому я должен сделать класс [3] ?? почему вы написали классы [0] = Integer.class; классы [1] = View.class; и что мне делать в случае моих 3 предметов? – Alaa

1

Edit:

ваш код должен быть, как этот

public class Options extends Activity implements OnItemClickListener { 


    Wizer wizer; 
    BroadcastReceiver receiver; 
    IntentFilter filter; 
    HashMap<String,Class> map=new HashMap<String,Class>(); 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_options); 
     wizer.Wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE); 
     filter=new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION); 

     registerReceiver(rcver,filter); 



     map.put("List available networks .",Networks.class); 
     map.put("List APs .", AP.class);  // your second class name 
     map.put("List Networks according to thier signal strength .",Signal.class); // third class name 
    } 
    final BroadcastReceiver rcver = new BroadcastReceiver() { 

     @Override 
     public void onReceive(Context context, Intent intent) { 

     }; 

}; 
    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.activity_options, menu); 
     return true; 
    } 

    public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { 
     // TODO Auto-generated method stub 
     Class c= map.get(arg0.getItemAtPosition(arg2).toString()); 
     Intent NL =new Intent(Options.this,c); 
     startActivity(NL); 
    } 
} 

Попробуйте

Возьмите HashMap

HashMap<String,Class> map=new HashMap(String,Class); 


map.put("List available networks .",Networks.class); 
map.put("List APs .", Second.class);  // your second class name 
map.put("List Networks according to thier signal strength .",Third.class); // third class name 

А потом в onItemClick

public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { 

    Class c= map.get(arg0.getItemAtPosition().toString()); 
    Intent NL =new Intent(Options.this,c); 
    startActivity(NL); 
} 

Примечание: Если у вас есть меньше элементов не использовать ListView, используйте LinearLayout с Scrollview вместо

+0

но что такое класс и строка? это дает мне ошибки на них? – Alaa

+0

класс и строка являются типичными типами ... Нажмите ctrl + shift + o и объявите HashMap как поле и присвойте значения в onCreate – Pragnani

+0

, что он не работает. что мне делать? – Alaa

Смежные вопросы