2015-01-15 2 views
1

Android에서 Lisview을 사용하고 있습니다. Listview의 각 항목은 button이며 각 button을 클릭하면 activity을 열려고합니다.목록보기 항목 버튼 클릭

내 코드는 비슷하지만 작동하지만 더 나은 방법이 있다고 생각합니다.

public class ListViewAdapter{  
    public interface MyItemClickListener { 
     void onItemClick(View view, int position); 
    } 

    private MyItemClickListener mItemClickListener; 

    public void setMyItemClickListener(MyItemClickListener listener) { 
     this.mItemClickListener = listener; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     // Find your image view and add clicklistener 

     imageView.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view, int position) { 
       if (mItemClickListener != null) { 
        mItemClickListener.onItemClick(view, position); 
       } 
      } 
     }); 
     return convertView; 
    } 
} 

그리고 :

public class LazyAdapterResul extends BaseAdapter { 

    // Declare Variables 
    Context context; 
    LayoutInflater inflater; 
    ArrayList<HashMap<String, String>> data; 
    ImageLoader imageLoader; 
    HashMap<String, String> resultp = new HashMap<String, String>(); 

    public LazyAdapterResultadosLiga(Context context, 
      ArrayList<HashMap<String, String>> arraylist) { 
     this.context = context; 
     data = arraylist; 
     imageLoader = new ImageLoader(context); 
    } 

    @Override 
    public int getCount() { 
     return data.size(); 
    } 

    @Override 
    public Object getItem(int position) { 
     return null; 
    } 

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

    public interface MyItemClickListener { 
      void onItemClick(View view, int position); 
     } 

     private MyItemClickListener mItemClickListener; 

     public void setMyItemClickListener(MyItemClickListener listener) { 
      this.mItemClickListener = listener; 
     } 

    public View getView(final int position, View convertView, ViewGroup parent) { 
     // Declare Variables 

     TextView equipo_local, equipo_visitante, estado_video; 


     inflater = (LayoutInflater) context 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

     View itemView = inflater.inflate(R.layout.list_row, parent, false); 
     // Get the position 
     resultp = data.get(position); 

     // Locate the TextViews in listview_item.xml 

     jor= (TextView) itemView.findViewById(R.id.jornada); 
     estado= (TextView) itemView.findViewById(R.id.estado); 
     vi = (ImageView) itemView.findViewById(R.id.imageView1); 


     estado.setText(resultp.get(Resul.TAG_ESTADO)); 
     jor.setText(resultp.get(Resul.TAG_JOR)); 



     vi.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       if (mItemClickListener != null) { 
        mItemClickListener.onItemClick(view, position); 
       } 
      } 

     }); 



     return itemView; 
    } 


} 
+0

더 나은 방법입니다 –

+2

목록보기 어댑터에 onclick 코드를 작성하십시오 .. – duggu

+0

목록보기 어댑터에서 활동을 열 수 있습니까? 방법? 의도 = 새로운 의도 (getActivity(), MyOtherActivity.class); startActivity (입); – Elena

답변

0

이 같은 어댑터에 인터페이스를 사용해보십시오 :

public class Resul extends Fragment{ 



    ImageView vi; 
    @Override 


    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
       Bundle savedInstanceState) { 

      View v= inflater.inflate(R.layout.resul, container, false); 
      listview = (ListView) v.findViewById(R.id.lista_resultados_liga); 

new DownloadJSON().execute(); 
      listview.setOnItemClickListener(new OnItemClickListener() { 
        public void onItemClick(AdapterView<?> parent, View view, int position, 
          long id) { 

         estado = ((TextView) view.findViewById(R.id.estado)) 
           .getText().toString(); 
         jor = ((TextView) view.findViewById(R.id.jor)) 
           .getText().toString(); 
         vi = ((ImageView) view.findViewById(R.id.imageView1)); 



          vi.setOnClickListener(new View.OnClickListener() { 
           @Override 
            public void onClick(View v) { 

            Intent in = new Intent(getActivity(), 
              Videos.class); 
            in.putExtra("id_video", resumen_id); 
            startActivity(in); 

            } 
           }); 

        } 


      } 
      }); 


      return v; 
     } 


    // DownloadJSON AsyncTask 
       private class DownloadJSON extends AsyncTask<Void, Void, Void> { 

        @Override 
        protected void onPreExecute() { 
         //code 
        } 

        @Override 
        protected Void doInBackground(Void... params) { 
         //code 
        } 

        @Override 
        protected void onPostExecute(Void args) { 
         // Locate the listview in listview_main.xml 
         listview = (ListView) getActivity().findViewById(R.id.mylist); 
         // Pass the results into ListViewAdapter.java 
         adapter = new LazyAdapterResul(getActivity(), arraylist); 
         // Set the adapter to the ListView 
         listview.setAdapter(adapter); 
         // Close the progressdialog 
         mProgressDialog.dismiss(); 
        } 
       } 





    } 

내 adapter's 코드, 나는 열린 이미지 활동에 클릭하면 것을 원하는 이제 귀하의 클릭리스트를 다음과 같이 귀하의 활동에 설정할 수 있습니다 :

// Pass the results into ListViewAdapter.java 
adapter = new LazyAdapterResultadosLiga(getActivity(), arraylist); 
// add click listener 
adapter.setMyItemClickListener(new MyItemClickListener(){ 
      @Override 
      public void onItemClick(View view, int position) { 
       Intent in = new Intent(getActivity(), MyOtherActivity.class); 
       startActivity(in); 
      } 
}); 
// Set the adapter to the ListView 
listview.setAdapter(adapter); 
+0

작동하지만 만약이 새로운 활동 "estado"이 in.putExtra ("estado", estado);에 전달하려는; 어떻게 목록 항목에서 가져올 수 있습니까? 너무 고마워. – Elena

+0

그 멋진 일이있다. 당신은 나의 onItemClick-Method에 입장을 가지고 있습니다. 메소드를 통해 작업 할 수 있으며, 메소드에서 전달 된 뷰 (항목)로 일부 뷰를 찾을 수 있습니다. 그것은 당신의 질문에 대답합니까? 그럼 이걸 표기 해 주시고 저에게 평판을 보여주십시오.) – Mann

+0

포지션이 없으면이 아이템의 "estado"값을 구해야합니다. 보기 (항목)로 일부보기를 찾을 수 있습니까?이 내용을 이해할 수 없습니다. 죄송합니다. 많은 감사합니다. – Elena

관련 문제