2015-03-22 3 views
0

это сценарий:Как сделать интерактивный элемент в списке и какой адаптер выбрать?

public class LecturAct extends ListActivity { 

    private static final String AR_ID = "id_lec"; 
    private static final String AR_LC = "lec_nm"; 
    private static final String AR_CLS = "class"; 
    private static final String EXTRA_DATA = "idr"; 
    JSONArray lec = null; 
    ArrayList<HashMap<String, String>> lec_list = new ArrayList<HashMap<String, String>>(); 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     requestWindowFeature(Window.FEATURE_NO_TITLE); 
     setContentView(R.layout.activity_lec); 

     Intent quiz = getIntent(); 
     String id = quiz.getStringExtra(EXTRA_DATA); 

     String link_url = "http://xxxx/xxxx.php?id="+id; 

     JSONParser jParser = new JSONParser(); 

     JSONObject json = jParser.gtJson(link_url); 

     try { 
      lec = json.getJSONArray("lec"); 

      for(int i = 0; i < lec.length(); i++){ 
       JSONObject ar =lec.getJSONObject(i); 

       String lectid = ar.getString(AR_ID); 
       String lecname = ar.getString(AR_LC); 
       String class = ar.getString(AR_CLS); 

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

       map.put(AR_ID, lectid); 
       map.put(AR_LC, lecname); 
       map.put(AR_CLS, class); 

       lec_list.add(map); 
      } 
     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 
     this.adapter_listview(); 
    } 

ива пытался сделать интерактивную деталь на моем ListView, это сценарий:

public void adapter_listview() { 

     ListAdapter adapter = new SimpleAdapter(this, lec_list, 
       R.layout.list_item, 
       new String[] { AR_ID, AR_CLS, AR_LC}, new int[] { 
         R.id.title, R.id.content, R.id.code}); 

     setListAdapter(adapter); 
     ListView lv = getListView(); 
     lv.setOnItemClickListener(new OnItemClickListener() { 

      @Override 
      public void onItemClick(AdapterView<?> parent, View view,int position, long id) { 
       String cd = ((TextView) view.findViewById(R.id.code)).getText().toString(); 
       Intent in = new Intent(LecturAct.this, Quis.class); 
       in.putExtra(AR_ID, cd); 
       startActivity(in); 
      } 
     }); 
    } 

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

  1. физико-
  2. биологии
  3. спорт
  4. социального
  5. математика

тогда, когда я нажимаю биологию или что-то я выбираю, он всегда будет вести меня к странице «математика». И что же мне делать? Я использую неправильный адаптер? Пожалуйста, помогите мне, дайте мне решение, чтобы сделать это правильно :(

ответ

0

Этот ответ, как Амина, но с некоторыми отличиями Пример кода:.

@Override 
protected void onListItemClick (ListView l, View v, int position, long id) { 
    super.onListItemClick(l, v, position, id); 

    String mlecture p = (String) l.getItemAtPosition(position); 
... 
    in.putExtra(AR_ID, lecture); 
    startActivity(in); 
} 

Примечания:

  • Получить параметр ListView (л), а также получить ряд/предмета положение с самого начала.
  • Вы не можете использовать метод view.findViewById, поскольку ListView (l) уже имеет объект пользовательского интерфейса.
  • Используйте переопределение onListItemClick, поскольку используется ListActivity.
+0

Я не могу использовать onListItemClick, красная подсказка продолжает говорить мне об изменении его на onItemClick –

+0

Я рад, что он работает сейчас для тебя. (Я должен был ответить ранее) Фактически onItemClick недоступен, когда используется ListActivity. onItemClick доступен, когда вы используете Activity вместо этого. Если это так, то используется «lv.setOnItemClickListener». Этот дизайн структуры затрудняет изменение родительского класса с Activity на ListActivity. –

0

Просто переопределения protected void onListItemClick (ListView l, View v, int position, long id) в LecturAct, например

protected void onListItemClick (ListView l, View v, int position, long id) { 
    String cd = getListAdapter().getItem(position); 
    Intent in = new Intent(LecturAct.this, Quis.class); 
    in.putExtra(AR_ID, cd); 
    startActivity(in); 
} 
+0

'String cd = getListAdapter(). GetItem (position); ' Что я могу сделать с этим? Я попытался изменить его, но я не понимаю :( –

0

Мой пример, как yours.Just изменить объект casting.Or String.

catalogListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 

        Object obj=(Object)((String) parent.getAdapter().getItem(position)); 
      String ss=obj.toString(); 

       Intent i = new Intent(getActivity(), PdfReader.class); 
       i.putExtra("catalogPdfUrl", "" +ss; 
       getActivity().startActivity(i); 

     } 
    }); 
+0

эта строка 'PDF pdf = (PDF) parent.getAdapter().getItem (position); 'я не понимаю, как его изменить :( –

+0

PDF - это myListItem пользовательский объект. Ваш объект - String.String - расширение (java lang.object). Такая же сборка. –

+0

ive попытался изменить его:' String cd = (String) parent.getAdapter(). GetItem (position); 'но по-прежнему автоматически выбирает последний элемент в списке –

0

Я внимательно рассмотрел ваш код. Я подозреваю, что данные установлены неправильно.

Изменение FROM:

new String[] { AR_ID, AR_CLS, AR_LC}, 
new int[] { R.id.title, R.id.content, R.id.code}); 

TO:

new String[] { AR_ID, AR_CLS, AR_LC}, 
new int[] { R.id.code, R.id.title, R.id.content }); 

Я переключился R.id.code. Я думаю, что это совместимо с in.putExtra (AR_ID, cd). У меня нет хорошего способа убедиться, так как я не знаю Quiz.class.

+0

Quiz.class просто извлекает дополнительные данные и устанавливает их как TextView –

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