2014-12-02 2 views
2

У меня есть этот код для создания пользовательского listadapter это часть моего кода:OnClick слушателем на ListView без нормального идентификатора

protected void onPostExecute(String success) 
{ 
    ListAdapter adapter = new SimpleAdapter (context, jsonList, 
      R.layout.items, new String[]{TAG_PELI, TAG_nombre2}, 
      new int[]{R.id.nombrePeli, R.id.nombreTwo}); 
    setListAdapter(adapter); 
    getListView(); 
} 

в моем XML witht пользовательских ListView является:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:paddingBottom="@dimen/activity_vertical_margin" 
android:paddingLeft="@dimen/activity_horizontal_margin" 
android:paddingRight="@dimen/activity_horizontal_margin" 
android:paddingTop="@dimen/activity_vertical_margin" 
tools:context=".MainActivity" > 

<ListView 
    android:id="@android:id/list" 
    android:layout_width="300dp" 
    android:layout_height="300dp" 
    android:layout_centerHorizontal="true" > 

</ListView> 

проблема заключается в том, что при вызове «onclicklistener» идентификатор не определен, потому что объявлен с помощью android: id = «@ android: id/list», мне нужно выбрать t его форма, потому что была ошибка. что я должен назвать «oncliclistener». благодаря

EDIT =============================== (решаемые)

с этим кодом работает для меня ! :) Спасибо

public class MainActivity extends Activity { 
private Context context; 
private static String url ="http://comupunt.esy.es/cities.php"; 
private static final String TAG_PELI = "name"; 
private static final String TAG_nombre2 = "nametwo"; 

ListView list; 

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

protected void onCreate (Bundle savedInstanceState) 
{ 
super.onCreate(savedInstanceState); 
setContentView(R.layout.activity_main); 
list =(ListView) findViewById(R.id.list); 
new GetJSONActivity(MainActivity.this).execute(); 
list.setOnItemClickListener(new OnItemClickListener() { 
public void onItemClick(AdapterView<?> parent, View view, 
    int position, long id) { 
    HashMap<String,String> map = 
    (HashMap<String,String>)list.getItemAtPosition(position); 
    String value = map.get(TAG_PELI); 
    String products = map.get(TAG_nombre2); 
    Toast toast1 = 
      Toast.makeText(getApplicationContext(), 
        value, Toast.LENGTH_SHORT); 

     toast1.show(); 
} 
}); 
} 

public boolean onCreateOptionsMenu(Menu menu) 
{ 

getMenuInflater().inflate(R.menu.main, menu); 

return true; 
} 

private class GetJSONActivity extends AsyncTask<String, Void, String> 
{ 
private Activity activity; 
public GetJSONActivity(Activity activity) 
{ 
this.activity = activity; 
context = activity; 
} 
@Override 
protected String doInBackground(final String... args) { 
    // TODO Auto-generated method stub 
    JSONParser jparser = new JSONParser(); 
    try{ 
     JSONArray json = jparser.GetJSONfromUrl(url); 
     for(int i =0;i <json.length();i++){ 
      try { 
       JSONObject c = json.getJSONObject(i); 
       String vpeli = c.getString(TAG_PELI); 
       String vname2 = c.getString(TAG_nombre2); 
       HashMap <String, String> map = new HashMap<String,String>(); 
       map.put(TAG_PELI, vpeli); 
       map.put(TAG_nombre2, vname2); 
       jsonList.add(map); 
      } catch (JSONException e) { 
       // TODO: handle exception 
       e.printStackTrace(); 
       return "error creando variables"; 
      } 
     } 
    ; }catch (Exception e) 
    { 

    } 
    return "exito"; 
} 
protected void onPostExecute(String success) 
{ 
ListAdapter adapter = new SimpleAdapter (context, jsonList, 
     R.layout.items, new String[]{TAG_PELI, TAG_nombre2}, 
     new int[]{R.id.nombrePeli, R.id.nombreTwo}); 
list.setAdapter(adapter); 

} 


} 
} 

ответ

0

присвоить идентификатор к вашему ListView в вашем xml файле:

<ListView 
    android:id="@+id/my_list_id" 
    android:layout_width="300dp" 
    android:layout_height="300dp" 
    android:layout_centerHorizontal="true" > 

</ListView> 

и в коде Java:

public class MainActivity extends Activity { 
ListView list; 
private Context context; 
private static String url ="http://comupunt.esy.es/cities.php"; 
private static final String TAG_PELI = "name"; 
private static final String TAG_nombre2 = "nametwo"; 

ListView listView; 

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

protected void onCreate (Bundle savedInstanceState) 
{ 
super.onCreate(savedInstanceState); 
setContentView(R.layout.activity_main); 
listView = findViewById(R.id.my_list_view); 
new GetJSONActivity(MainActivity.this).execute(); 
} 

public boolean onCreateOptionsMenu(Menu menu) 
{ 

    getMenuInflater().inflate(R.menu.main, menu); 

    return true; 
} 

private class GetJSONActivity extends AsyncTask<String, Void, String> 
{ 
private Activity activity; 
public GetJSONActivity(Activity activity) 
{ 
this.activity = activity; 
context = activity; 
} 
    @Override 
    protected String doInBackground(final String... args) { 
     // TODO Auto-generated method stub 
     JSONParser jparser = new JSONParser(); 
     try{ 
      JSONArray json = jparser.GetJSONfromUrl(url); 
      for(int i =0;i <json.length();i++){ 
       try { 
        JSONObject c = json.getJSONObject(i); 
        String vpeli = c.getString(TAG_PELI); 
        String vname2 = c.getString(TAG_nombre2); 
        HashMap <String, String> map = new HashMap<String,String>(); 
        map.put(TAG_PELI, vpeli); 
        map.put(TAG_nombre2, vname2); 
        jsonList.add(map); 
       } catch (JSONException e) { 
        // TODO: handle exception 
        e.printStackTrace(); 
        return "error creando variables"; 
       } 
      } 
     ; }catch (Exception e) 
     { 

     } 
     return "exito"; 
} 
protected void onPostExecute(String success) 
{ 
    ListAdapter adapter = new SimpleAdapter (context, jsonList, 
      R.layout.items, new String[]{TAG_PELI, TAG_nombre2}, 
      new int[]{R.id.nombrePeli, R.id.nombreTwo}); 
    listView.setAdapter(adapter); 
    notifyDataSetChanged(); 

} 

} 
} 

теперь ваш список имеет действительный идентификатор и вы можете использовать его как это: R.id.my_list_id

+0

У меня есть это, но он бросает ту же ошибку, ваш контент должен иметь listview, чья atributte является android.R.id.list –

+0

, потому что вы используете 'ListActivity' или' ListFragment'. вы должны использовать 'Activity' или' Fragment' и определить свой 'ListView' в этом. –

+0

, но он несовместим с другими методами. новый GetJSONActivity (MainActivity.this) .execute(); setListAdapter (адаптер); getListView(); –

0

Используйте свое собственное приложение конкретным ID в вашем XML, ссылки с помощью «Добавить в» Синтаксис @+id:

android:id="@+id/list" 

Тогда вы можете ссылки его в коде, как R.id.list.

=== Редактировать

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

getListView().setOnClickListener(this); 

Тогда ваш Activity просто реализует метод onClick() надлежащим образом (хотя я не уверен, что это действительно то, что вы пытаетесь сделать здесь.)

+0

извините, но я не undestand, как я должен сделать это, вы можете объяснить мне в код? спасибо –

+0

Я не уверен, что вы подразумеваете под своим вторым комментарием. Использование специального идентификатора приложения - это «обычный» способ использования идентификаторов для ваших макетов. Это не повлияет на другое использование в адаптере и т. Д. –

+0

да, но я должен использовать android: id = "@ android: id/list", потому что я использую класс с extends ListActivity –

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