2017-12-07 11 views
-1

다른 클래스의 목록보기 및 사용자 정의 어댑터.
사용자 지정 어댑터에는 2 개의 textView가 있습니다.OnItemClickListener에서 가져 오는보기의 수신기를 작성하십시오.

에서 나는 Textviews에 대한 수신기를 만들었습니다.
TextView 수신기는 약간의 시간 동안 작동하지 않습니다.

listView.setOnItemClickListener(new OnItemClickListener() { 

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

      TextView tv1 = (TextView) view.findViewById(R.id.tv1); 

      tv1.setOnClickListener(new OnClickListener() { 

       public void onClick(View v) { 
        Toast.makeText(act, "tv1 clicked", 300).show(); 
       } 
      }); 

      TextView tv2 = (TextView) view.findViewById(R.id.tv2); 

      tv2.setOnClickListener(new OnClickListener() { 

       @Override 
       public void onClick(View arg0) { 
        Toast.makeText(act, "tv2 clicked", 300).show(); 
       } 
      }); 

      // listViewListeners(parent, view, pos, id); 
     } 
    }); 
+0

질문은'onItemClick'에 리스너를 추가하는 이유입니까? 제대로 작동하지 않을 것입니다. 맞춤 어댑터 클래스에서 클릭 리스너를 추가하지 않는 이유는 무엇입니까? –

+0

List View와 Custom Adapter는 서로 다른 클래스에 있고 어댑터는 여러 가지 활동을 사용해야합니다. –

+0

어댑터의 getView()에서 Listener를 설정합니다. 사용자 지정 목록 어댑터 자습서를 따릅니다. "내 어댑터가 여러 액티비티를 사용해야합니다."목록 항목 클릭과 관련이있는 것. – ADM

답변

1

당신은 자식 요소의 높이와 이벤트 리스너에 따라 부모를 클릭 할 때 부모가 사용자의 터치를 취할 것대로 작동하지 않습니다 처음으로, 그래서 아이 뷰에 이벤트를 클릭하여 등록을 시도되지만, , 그것은 자식으로부터 클릭을 취합니다.

그 사용 인터페이스

interface ClickListener{ 
    void tvOneClicked(int position); 
    void tvTwoClicked(int position); 
} 

를 방지하고

adapter = new CustomAdapter(this,some_layout,somedata, new ClickListener(){ 
    @Override 
    public void tvOneClicked(int position){ 
     //Toast.makeText(act, "tv1 clicked", 300).show(); 
    } 

    @Override 
    public void tvOneClicked(int position){ 
     //Toast.makeText(act, "tv2 clicked", 300).show(); 
    }}); 

같이 그리고 당신의 Adapter에 인터페이스 위의 활동 패스에서 어댑터를 호출하는 동안, 당신의 textview의 경우 어떤 activity를 호출하는이를 사용하려면 클릭 수

private ClickListener clickListener; 
public CustomAdapter(Activity act,int layout,List<> data, ClickListener listener){ 
    this.clickListener = listener; 
} 

public void getView(...){ 

    ... 
    tv1.setOnClickListener(new OnClickListener() { 
       @override 
       public void onClick(View v) { 
        clickListener.onOneClicked(position); 
       } 
      }); 
      tv2.setOnClickListener(new OnClickListener() { 

       @Override 
       public void onClick(View arg0) { 
        clickListener.onTwoClicked(position); 
       } 
      }); 
    ... 
    } 
+0

덕분에 ... 고마워요. –