如何区分ListFragment中的视图与自定义ArrayAdapter?

时间:2014-08-15 16:11:38

标签: java android android-listview android-listfragment

我想知道我是否可以添加逻辑\区分我的onListItemClick中的视图? 我有一个listFragment,其中有几个视图,并希望执行不同的操作。我试图在我的视图上使用.isPressed()方法但没有成功。

这样做的正确方法是什么。 -谢谢。


根据标记答案的建议,我在CustomArrayAdapter中实现了以下代码,一切运行良好。我有一个ListFragment,它为同一个单元格中的单元格和可单击的imagesViews实现onListItemClick。希望这有助于下一个人。

public class ZAdapter extends ArrayAdapter<HashMap<String, String>>{

protected static final String TAG = "myLog";
Context context;
ArrayList<HashMap<String,String>> myListOfMaps;

public ZAdapter(Context context, int textViewResourceId,    ArrayList<HashMap<String, String>> myListOfMaps) {
    super(context, textViewResourceId, myListOfMaps);
    // TODO Auto-generated constructor stub
    this.context=context;

    this.myListOfMaps = myListOfMaps;

}


public class MyViewHolder
{

    ImageView editImage;
    TextView tvTitle;
    TextView tvSubTitle;
    TextView tvRepEmail;
    TextView tvRepCell;

    public MyViewHolder(View v)
    {
        editImage = (ImageView) v.findViewById(R.id.row_icon);
         tvTitle = (TextView) v.findViewById(R.id.row_title);
         tvSubTitle = (TextView) v.findViewById(R.id.row_subTitle);
         tvRepEmail = (TextView) v.findViewById(R.id.tvRepEmail);
         tvRepCell = (TextView) v.findViewById(R.id.tvRepCell);
    }


}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
    // TODO Auto-generated method stub
    final int index=position;

    View row = convertView;
    MyViewHolder holder = null;


    if(row==null){
    LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    row = inflater.inflate(R.layout.row, parent, false);
    holder = new MyViewHolder(row);


    row.setTag(holder);

    }else{

        holder = (MyViewHolder) row.getTag();



    }



    holder.editImage.setImageResource(R.drawable.edit_img);holder.editImage.setTag("goEdit");
    holder.tvTitle.setText(myListOfMaps.get(position).get("prod"));
    holder.tvSubTitle.setText(myListOfMaps.get(position).get("dist"));
    holder.tvRepEmail.setText(myListOfMaps.get(position).get("repEmail"));
    holder.tvRepCell.setText(myListOfMaps.get(position).get("repPhone"));

    holder.editImage.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            Log.d(TAG, "*****************  getView() *********called"+index);

        }
    });


    return row;
}

}

- 谢谢你

3 个答案:

答案 0 :(得分:1)

不确定您是否可以在onListItemClick函数中处理它。您可以处理事件点击的一个地方是Adapter类 - getView函数。在此函数中,您可以找到控件并注册事件处理程序。

请注意,您只在此块中设置事件处理程序

if (convertView == null) {

    // Find your controls and register event handlers here  
}

答案 1 :(得分:0)

在一行中的每个视图上设置点击侦听器的最佳位置是ViewHolder。在视图持有者构造函数中,为要设置的子视图设置onClickListener。此外,如果您需要知道该行的id,则应在id'类中定义ViewHolder字段,然后在onClickListener中使用该字段。不要忘记在getView方法中更新视图ID(或者如果您在CursorAdapter中使用bindView)。

答案 2 :(得分:0)

View方法中的onListItemClick参数是单击的视图。在您的情况下,它是v。要采取适当的措施,只需通过获取其ID并在适当时委派来确定它是什么视图。

这是一种可能的结构:

public void onListItemClick(ListView l, View v, int position, long id) {

    switch(v.getId()) {
        case R.id.row_icon:
            // do something
        case R.id.row_title:
            // do something
        case R.id.row_subTitle:
            // do something
    }
}