【问题标题】:Listview´s items button clickListview 的项目按钮单击
【发布时间】:2015-01-15 10:16:55
【问题描述】:

在 Android 上使用 LisviewListview 的每一项都有一个button,当我单击每个button 时,我想打开activity

我的代码是这样的,它可以工作,但我认为有更好的方法来做到这一点。

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





    }

我的适配器的代码,当我点击打开图像活动时,我想要它:

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


}

【问题讨论】:

  • 在列表视图适配器上编写您的 onclick 代码 ..
  • 但是我可以从列表视图适配器打开活动吗?如何? Intent in = new Intent(getActivity(), MyOtherActivity.class); startActivity(in);
  • @Elena 使用 Intent = new Intent(getContext(), MyOtherActivity.class); startActivity(in);
  • 最好制作一个自定义 ListView 并为它制作一个单独的自定义 Adapter 类
  • 是的,将自定义适配器用于另一种类型的实现stackoverflow.com/questions/8166497/…

标签: android listview android-listview listadapter


【解决方案1】:

在你的适配器中尝试这样的接口:

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

现在您可以像这样在 Activity 中设置 clicklistener:

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

【讨论】:

  • 有效,但如果我想将这样的“estado”传递给这个新活动 in.putExtra("estado", estado);我如何从列表项中获取它?非常感谢
  • 这很酷。您在我的 onItemClick-Method 中占有一席之地。您可以对其进行操作,也可以通过方法传递的视图(项目)找到一些视图。它回答了你的问题吗?然后请标记它并向我展示一些声誉,因为这比你的版本更干净;)
  • 我需要没有位置,我需要拯救这个项目的“estado”的价值。我怎样才能找到视图(项目)的一些视图,这个我不明白,对不起,非常感谢
  • 我已经这样做了,但不起作用 estado = ((TextView) view.findViewById(R.id.estado)) .getText().toString(); in.putExtra("estado", estado);
  • 在 onItemClick 方法中执行类似的操作以获得您的参考:estado = view.findViewById(R.id.estado)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-10-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多