2013-05-21 5 views
0

"ProtoType"이라 불리는 새로운 롬을위한 설정 앱을 만들려고했는데, 내가 Listview에 OnClickListener를 추가하려하지만, 그렇게 할 수있는 적절한 방법을 찾을 수 없다. 나는 도움을 청하기 위해 여기로 향했다. 그리고 누군가 내가 나에게 나의 활동을 어떻게 게시 할 것인지 고발 할 수 있는지 궁금하게 생각하고 있었다.안드로이드 리스트뷰에 OnClickListener 추가하기

package fr.xgouchet.tuto.switchpreferences; 

import java.util.ArrayList; 
import java.util.List; 

import android.preference.PreferenceActivity; 
import android.widget.ListAdapter; 

public class MyPrefsActivity extends PreferenceActivity { 

    private List<Header> mHeaders; 

    protected void onResume() { 
     super.onResume(); 

     setTitle("Settings"); 

     if (getListAdapter() instanceof MyPrefsHeaderAdapter) 
      ((MyPrefsHeaderAdapter) getListAdapter()).resume(); 
    } 

    protected void onPause() { 
     super.onPause(); 
     if (getListAdapter() instanceof MyPrefsHeaderAdapter) 
      ((MyPrefsHeaderAdapter) getListAdapter()).pause(); 
    } 

    public void onBuildHeaders(List<Header> target) { 
     // Called when the settings screen is up for the first time 
     // we load the headers from our xml description 

     loadHeadersFromResource(R.xml.my_prefs_headers, target); 

     mHeaders = target; 
    } 

    public void setListAdapter(ListAdapter adapter) { 
     int i, count; 

     if (mHeaders == null) { 
      mHeaders = new ArrayList<Header>(); 
      // When the saved state provides the list of headers, 
      // onBuildHeaders is not called 
      // so we build it from the adapter given, then use our own adapter 

      count = adapter.getCount(); 
      for (i = 0; i < count; ++i) 
       mHeaders.add((Header) adapter.getItem(i)); 
     } 

     super.setListAdapter(new MyPrefsHeaderAdapter(this, mHeaders)); 
    } 
} 
+1

당신이 어디에서 내 코드에서 해당 위치를 않는 목록보기 –

+0

http://stackoverflow.com/a/12813906/1168654 –

답변

3

On PreferenceActivity ListView는 getListView() 뒤에 숨겨져 있습니다. simpliest 예 :

ListView listView = getListView(); 
    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     public void onItemClick(AdapterView<?> av, View view, int i, long l) { 
      Toast.makeText(Activity.this, "myPos "+i, Toast.LENGTH_LONG).show(); 
     } 
    }); 

코드 나는 그것이 어댑터에서 구현해야한다고 생각

package fr.xgouchet.tuto.switchpreferences; 

import java.util.ArrayList; 
import java.util.List; 

import android.preference.PreferenceActivity; 
import android.widget.ListAdapter; 

public class MyPrefsActivity extends PreferenceActivity { 

    private List<Header> mHeaders; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 



     ListView listView = getListView(); 
     listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      public void onItemClick(AdapterView<?> av, View view, int i, long l) { 
       Toast.makeText(Activity.this, "myPos "+i, Toast.LENGTH_LONG).show(); 
      } 
     }); 
    } 

    protected void onResume() { 
     super.onResume(); 

     setTitle("Settings"); 

     if (getListAdapter() instanceof MyPrefsHeaderAdapter) 
      ((MyPrefsHeaderAdapter) getListAdapter()).resume(); 
    } 

    protected void onPause() { 
     super.onPause(); 
     if (getListAdapter() instanceof MyPrefsHeaderAdapter) 
      ((MyPrefsHeaderAdapter) getListAdapter()).pause(); 
    } 

    public void onBuildHeaders(List<Header> target) { 
     // Called when the settings screen is up for the first time 
     // we load the headers from our xml description 

     loadHeadersFromResource(R.xml.my_prefs_headers, target); 

     mHeaders = target; 
    } 

    public void setListAdapter(ListAdapter adapter) { 
     int i, count; 


     if (mHeaders == null) { 
      mHeaders = new ArrayList<Header>(); 
      // When the saved state provides the list of headers, 
      // onBuildHeaders is not called 
      // so we build it from the adapter given, then use our own adapter 

      count = adapter.getCount(); 
      for (i = 0; i < count; ++i) 
       mHeaders.add((Header) adapter.getItem(i)); 
     } 

     super.setListAdapter(new MyPrefsHeaderAdapter(this, mHeaders)); 
    } 

} 
+0

에 대한 onItemClickListener 확인 했습니까? 나는 공공 무효에서 onCreate (번들 savedInstanceState) { – Shayden117

+0

정확히 내가 빨간색 무리 내가 병 –

+0

에 제안하지만 – Shayden117

0

처럼 보일 것입니다. 이것은 사용자 정의 어댑터의 예제입니다. 항목의 요소에 대한 설정 및 리스너를 지정할 수 있습니다.

/** Provides the custom adapter for views of words */ 
private class WordAdapter extends ArrayAdapter<DTOWord> { 
    Context context; 
    int layoutResourceId; 
    ArrayList<DTOWord> wordsArray; 

    /** Set up words data */ 
    public WordAdapter(Context context, int layoutResourceId, 
      ArrayList<DTOWord> words) 
    { 
     super(context, layoutResourceId, words); 
     this.context = context; 
     this.layoutResourceId = layoutResourceId; 
     this.wordsArray = words;    
    } 

    @Override 
    /** Returns a view with a word */ 
    public View getView(int position, View convertView, ViewGroup parent) 
    { 
     View row = convertView; 

     if (row == null) 
     { 
      LayoutInflater inflater = ((Activity) context). 
        getLayoutInflater(); 
      row = inflater.inflate(layoutResourceId, parent, false); 
     } 

     return this.getView(row, this.wordsArray.get(position)); 
    } 

    /** Set up the view of the word with specified data */ 
    private View getView(View wordView, final DTOWord wordData) 
    { 
     View container = (View) wordView.findViewById(R.id. 
       layout_wordData); 
     TextView title = (TextView) wordView.findViewById(R.id. 
       textView_word); 
     Button btnEditWord = (Button) wordView.findViewById(R.id. 
       btn_wordEdit); 

     this.setEditListener(btnEditWord, wordData);    

     return wordView; 
    } 

    /** Set action which switches to the edition view of the selected word */ 
    private void setEditListener(Button btnEditWord, final DTOWord wordData) { 
     btnEditWord.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Intent i = new Intent(WordAdapter.this.context, 
         AddWord.class); 
       i.putExtra("word-name", wordData.getWord()); 
       i.putExtra("word-language", wordData.getLanguage(). 
         getName()); 
       startActivity(i);   
      } 
     }); 
    } 
} 
관련 문제