2016-05-05 3 views
0

У меня есть этот фрагмент: http://pastebin.com/zj5DLpwX Но мой onItemClickListener не работает, он не открыть DetailActivity ... Я просто добавил макеты XML, вам нужен какой-то код? Любые идеи?ListView в фрагменте - не onItemClickListener работает

fragment_v:

<?xml version="1.0" encoding="utf-8"?> 
     <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:orientation="vertical"> 

      <ListView 
       android:id="@android:id/list" 
       android:layout_width="fill_parent" 
       android:layout_height="wrap_content"/> 

     </LinearLayout>` 

list_item:

<?xml version="1.0" encoding="utf-8"?> 
     <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:orientation="vertical" 
      android:padding="10dp" 
      android:paddingLeft="10dp" 
      android:paddingRight="10dp" > 

      <!-- Name Label --> 

      <TextView 
       android:id="@+id/name" 
       android:layout_width="fill_parent" 
       android:layout_height="wrap_content" 
       android:paddingBottom="2dip" 
       android:paddingTop="6dip" 
       android:textColor="#43bd00" 
       android:textSize="16sp" 
       android:textStyle="bold" /> 

      <!-- Email label --> 
      <TextView 
       android:id="@+id/email" 
       android:layout_width="fill_parent" 
       android:layout_height="wrap_content" 
       android:paddingBottom="2dip" 
       android:textColor="#acacac" /> 

      <!-- Mobile number label --> 
      <TextView 
       android:id="@+id/mobile" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:gravity="left" 
     android:text="Mobile: " 
     android:textColor="#5d5d5d" 
     android:textStyle="bold" /> 

     </LinearLayout>` 

Это фрагмент кода

package com.tw.vp; 


import android.app.ProgressDialog; 
import android.content.Intent; 
import android.os.AsyncTask; 
import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.support.v4.app.ListFragment; 
import android.util.Log; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.AdapterView; 
import android.widget.LinearLayout; 
import android.widget.ListAdapter; 
import android.widget.ListView; 
import android.widget.SimpleAdapter; 
import android.widget.TextView; 

import org.json.JSONArray; 
import org.json.JSONException; 
import org.json.JSONObject; 

import java.util.ArrayList; 
import java.util.HashMap; 


/** 
* A simple {@link Fragment} subclass. 
*/ 
public class VFragment extends ListFragment { 

    private ProgressDialog pDialog; 

    // URL to get contacts JSON 
    private static String url = "http://api.androidhive.info/contacts/"; 

    // JSON Node names 
    private static final String TAG_CONTACTS = "contacts"; 
    private static final String TAG_ID = "id"; 
    private static final String TAG_NAME = "name"; 
    private static final String TAG_EMAIL = "email"; 
    private static final String TAG_ADDRESS = "address"; 
    private static final String TAG_GENDER = "gender"; 
    private static final String TAG_PHONE = "phone"; 
    private static final String TAG_PHONE_MOBILE = "mobile"; 
    private static final String TAG_PHONE_HOME = "home"; 
    private static final String TAG_PHONE_OFFICE = "office"; 

    // contacts JSONArray 
    JSONArray contacts = null; 

    // Hashmap for ListView 
    ArrayList<HashMap<String, String>> contactList; 


    // public VFragment() { 
     // Required empty public constructor 
    //} 


    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     // Inflate the layout for this fragment 
     View v= inflater.inflate(R.layout.fragment_v, container, false); 
     ListView lv =(ListView)v.findViewById(android.R.id.list); 

     contactList = new ArrayList<HashMap<String, String>>(); 



     // Listview on item click listener 
     lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { 

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

       Log.d("Aufruf", "onItemClick"); 
       // getting values from selected ListItem 
       String name = ((TextView) view.findViewById(R.id.name)) 
         .getText().toString(); 
       String cost = ((TextView) view.findViewById(R.id.email)) 
         .getText().toString(); 
       String description = ((TextView) view.findViewById(R.id.mobile)) 
         .getText().toString(); 

       // Starting single contact activity 
       Intent in = new Intent(getActivity(), DetailActivity.class); 
       in.putExtra(TAG_NAME, name); 
       in.putExtra(TAG_EMAIL, cost); 
       in.putExtra(TAG_PHONE_MOBILE, description); 
       startActivity(in); 

      } 
     }); 

     // Calling async task to get json 
     new GetContacts().execute(); 


     return v; 
    } 

    /** 
    * Async task class to get json by making HTTP call 
    * */ 
    private class GetContacts extends AsyncTask<Void, Void, Void> { 

     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 
      // Showing progress dialog 
      pDialog = new ProgressDialog(getActivity()); 
      pDialog.setMessage("Please wait..."); 
      pDialog.setCancelable(false); 
      pDialog.show(); 

     } 

     @Override 
     protected Void doInBackground(Void... arg0) { 
      // Creating service handler class instance 
      ServiceHandler sh = new ServiceHandler(); 

      // Making a request to url and getting response 
      String jsonStr = sh.makeServiceCall(url, ServiceHandler.GET); 

      Log.d("Response: ", "> " + jsonStr); 

      if (jsonStr != null) { 
       try { 
        JSONObject jsonObj = new JSONObject(jsonStr); 

        // Getting JSON Array node 
        contacts = jsonObj.getJSONArray(TAG_CONTACTS); 

        // looping through All Contacts 
        for (int i = 0; i < contacts.length(); i++) { 
         JSONObject c = contacts.getJSONObject(i); 

         String id = c.getString(TAG_ID); 
         String name = c.getString(TAG_NAME); 
         String email = c.getString(TAG_EMAIL); 
         String address = c.getString(TAG_ADDRESS); 
         String gender = c.getString(TAG_GENDER); 

         // Phone node is JSON Object 
         JSONObject phone = c.getJSONObject(TAG_PHONE); 
         String mobile = phone.getString(TAG_PHONE_MOBILE); 
         String home = phone.getString(TAG_PHONE_HOME); 
         String office = phone.getString(TAG_PHONE_OFFICE); 

         // tmp hashmap for single contact 
         HashMap<String, String> contact = new HashMap<String, String>(); 

         // adding each child node to HashMap key => value 
         contact.put(TAG_ID, id); 
         contact.put(TAG_NAME, name); 
         contact.put(TAG_EMAIL, email); 
         contact.put(TAG_PHONE_MOBILE, mobile); 

         // adding contact to contact list 
         contactList.add(contact); 
        } 
       } catch (JSONException e) { 
        e.printStackTrace(); 
       } 
      } else { 
       Log.e("ServiceHandler", "Couldn't get any data from the url"); 
      } 

      return null; 
     } 

     @Override 
     protected void onPostExecute(Void result) { 
      super.onPostExecute(result); 
      // Dismiss the progress dialog 
      if (pDialog.isShowing()) 
       pDialog.dismiss(); 
      /** 
      * Updating parsed JSON data into ListView 
      * */ 
      ListAdapter adapter = new SimpleAdapter(
        getActivity(), contactList, 
        R.layout.list_item, 
        new String[] { TAG_NAME, TAG_EMAIL, 
        TAG_PHONE_MOBILE }, 
        new int[] { R.id.name, 
        R.id.email, R.id.mobile }); 

      setListAdapter(adapter); 
     } 

    } 

} 
+0

опубликуйте свой logcat.can вы можете добавить DetailActivity в файл вашего файла. –

+0

Что происходит именно так? Сбой или просто ничего не делает? [logcat, если он сработает]. Также будьте более наглядными в своих вопросах, пожалуйста. – Vucko

+0

@tom опубликуйте свой xml please – varunkr

ответ

1

Если вы используете ListFragment, то вы можете просто использовать его override метод onListItemClick().

@Override 
public void onListItemClick(ListView l, View v, int position, long id) { 
    // TODO Auto-generated method stub 
    super.onListItemClick(l, v, position, id); 

    // Your Stuff Goes Here 
} 

А также добавить android:descendantFocusability="blocksDescendants" в корневой макет элемента списка.

+0

сейчас я получаю эту ошибку: java.lang.RuntimeException: не удалось запустить activity ComponentInfo {com.tomwellmann.vertretungsplan/com.tomwellmann.vertretungsplan.DetailActivity}: java.lang.NullPointerException: попытка вызвать виртуальный метод 'java.lang.String android.content.Intent.getStringExtra (java.lang.String) 'на ссылке с нулевым объектом –

+0

Проверьте свою «детальную активность» - это пустая строка при получении данных с помощью 'getStringExtra'. –

+0

Причина 'Down Vote'? Проблема «Click Listener» решается этим. У него есть ошибки в другом коде. Стреляйте в причину 'Down Vote' здесь @DownVoter. –

0

Изменение ниже кода из кода: -

ListView lv; 

//code to get the listView instance using findViewByID etc 

lv.setOnItemClickListener(new OnItemClickListener() 
{ 
    @Override public void onItemClick(AdapterView<?> arg0, View arg1,int position, long arg3) 
    { 
     Toast.makeText(EnclosingActivity.this, "Clicking me", Toast.LENGTH_SHORT).show(); 
    } 
}); 
+0

ОК, он изменил «onItemClickListener» на «lv.setOnItemClickListener (новый AdapterView.OnItemClickListener()» и не работает ... нет тоста –

+0

@ этот код работает в классе MyActivity. –

+0

Я использую фрагменты –

1

Попробуйте добавить

android:descendantFocusability="blocksDescendants" 

к вашему LinearLayout в list_item XML

+0

@ tom, вы попробовали это? – varunkr

+0

@tom, если он работает, подумайте о повышении/принятии ti. Спасибо !! – varunkr

+0

Я пробовал, но я ничего не вижу: -/ –

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