2015-01-15 1 views
1

Использование Lisview на Android. Каждый предмет Listview имеет button, и я хочу открыть activity, когда я нажимаю каждый button.Элементы списка ListView Нажмите

Мой код такой, он работает, но я думаю, что есть лучший способ сделать это.

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 код, я хочу, чтобы, когда я нажимаю на активности изображения открытой:

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

Но могу ли я открыть активность из адаптера списка? Как? Intent in = new Intent (getActivity(), MyOtherActivity.class); startActivity (in); – Elena

ответ

0

Попробуйте с интерфейсом в адаптере, как это:

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; 
    } 
} 

И теперь вы можете настроить свой кликлайнер в своей деятельности следующим образом:

// 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

Thats the cool thing. У вас есть позиция в моем методе onItemClick. Вы можете работать с ним или можете найти некоторые представления с видом (объектом), который передается методом. Отвечает ли он на ваш вопрос? Тогда, пожалуйста, отметьте это и покажите мне какую-то репутацию, потому что это намного более чистая версия, чем ваша;) – Mann

+0

Мне нужно без позиции, мне нужно спасти значение «estado» этого предмета. Как я могу найти некоторые представления с видом (item), это я не понимаю, извините и много спасибо – Elena