2013-02-05 2 views
4

나는 플레이어에 대한 정보를 표시하는 활동이 있습니다. 이 부분은 잘 작동합니다. (나는 어댑터를 사용했다.) 그러나 행을 클릭 할 때이를 감지하는 코드는 어디에 두어야합니까?Android ListActivity 행 클릭

PlayersActivity.java

package com.democratandchronicle.billstrainingcamp; 

import android.os.Bundle; 

public class PlayersActivity extends ListActivity 
{ 

    @Override 
    protected void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_players); 
     PlayersAdapter adapter = new PlayersAdapter(this); 
     getListView().setAdapter(adapter); 
     PlayersFetchTask loadPlayersTask = new PlayersFetchTask(adapter); 
     loadPlayersTask.execute(); 
    } 
} 

PlayersAdapter.java 내가 행을 클릭하면 감지 코드를 삽입해야

package com.democratandchronicle.billstrainingcamp; 


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

import android.content.Context; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.BaseAdapter; 
import android.widget.ImageView; 
import android.widget.RelativeLayout; 
import android.widget.TextView; 

public class PlayersAdapter extends BaseAdapter { 

    private Context context; 
    private LayoutInflater layoutInflater; 
    private JSONArray entries = new JSONArray(); 
    private DrawableManager dm; 
    public PlayersAdapter(Context context) { 
     super(); 
     this.context = context; 
     this.layoutInflater = (LayoutInflater) this.context 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     this.dm = new DrawableManager(); 
    } 

    @Override 
    public int getCount() { 
     return this.entries.length(); 
    } 

    @Override 
    public Object getItem(int position) { 
     try { 
      return this.entries.getJSONObject(position); 
     } catch (JSONException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     return null; 
    } 

    @Override 
    public long getItemId(int position) { 
     return position; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 

     RelativeLayout playerRowView; 

     if (convertView == null) 
     { 
      playerRowView = (RelativeLayout) this.layoutInflater.inflate(R.layout.player_row, parent, false); 
     } 
     else 
     { 
      playerRowView = (RelativeLayout) convertView; 
     } 

     TextView playerNameText = (TextView) playerRowView.findViewById(R.id.playerName); 
     TextView playerPositionText = (TextView) playerRowView.findViewById(R.id.playerPosition); 
     ImageView playerImageView = (ImageView) playerRowView.findViewById(R.id.playerImage); 

     try 
     { 
      JSONObject dataRow = this.entries.getJSONObject(position); 
      playerNameText.setText(dataRow.getString("firstName") + " "+ dataRow.getString("lastName")); 
      playerPositionText.setText(dataRow.getString("position")); 
      if (!dataRow.getString("photo").equals("")) 
      { 
       this.dm.fetchDrawableOnThread(dataRow.getString("photo"), playerImageView); 
      } 

     } 
     catch (JSONException e) 
     { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     return playerRowView; 
    } 

    public void upDateEntries(JSONArray entries) 
    { 
     this.entries = entries; 
     this.notifyDataSetChanged(); 
    } 

} 
+0

getView 메소드에서 ... – smk

+0

메소드의 이름은 무엇입니까? OnClick을 찾으려고했는데 –

답변

10

?

행의 아무 곳이나 클릭을 감지하려면 액티비티에서 OnItemClickListener을 사용하십시오.

각 행의 다른 지역에서 클릭을 감지하려면 어댑터의 getView() 안에 OnClickListeners을 사용하십시오.

또한 ViewHolder 메서드를 사용하면 약간 더 빠른 어댑터를 만들 수 있습니다. Google 토크 TurboCharge Your UI에서이 내용과 다른 우수 사례에 대해 자세히 논의합니다.


가 어떻게 내 활동에 이런 짓을 했을까 추가?

ListActivities에는 OnListItemClick이 내장되어 있으며 콜백의 이름은 onListItemClick()입니다. 다음과 같이 사용하십시오 :

@Override 
protected void onListItemClick (ListView l, View v, int position, long id) { 
    Toast.makeText(this, "Clicked row " + position, Toast.LENGTH_SHORT).show(); 
} 
+0

내 활동에서 어떻게해야합니까? OnItemClickListener하지만 getListView()를 시도했지만 메서드를 찾을 수 없습니다. –

+0

어댑터의 getView 메소드에서 버튼이나 이미지 등을 가져 와서 onClickListener를 구현하십시오. – smk

+0

알았어요, 고마워! –