2014-10-05 103 views
0

我是Android上的ListViews的新成员。我需要一个4x5(按钮,清单和文本框)的布局,我正在考虑使用ListViews,每个布局包含一行(4个按钮,4个清单和4个文本框),然后制作5个项目。Android按钮列表查看列表

如果我只做一行(没有ListView),我已经设法使它工作。

但是,当我惹列表视图,我不知道如何使用“的onClick”上的按钮和清单,所以我知道哪一行的按钮被按下...

任何人都可以点我举一个例子或代码为了这?

谢谢

回答

1

该位置将被自动管理。如果您的活动延伸ListActivityListFragment,您只需覆盖onListItemClick

@Override 
    protected void onListItemClick(ListView l, View v, int pos, long id) { 
     super.onListItemClick(l, v, pos, id); 
     // your action 
} 

同样的,如果你的活动不延长ListActivityListFragment,你必须在ListView控件设置监听器:

listView.setOnItemClickListener(new OnItemClickListener() { 

      @Override 
      public void onItemClick(AdapterView<?> parent, View view, 
        int position, long id) { 
       // TODO Auto-generated method stub 

      } 
     }); 

当然,这事件与列表中的全部项目。相反,如果你想为列表项中的每个视图设置一个监听器,你应该在你的适配器内部完成。假设使用ArrayAdapter

public class CustomAdapter extends ArrayAdapter<MyObject> { 
     private final Context context;   
     private ArrayList<MyObject> list; 

     public CustomAdapter(Context context, ArrayList<MyObject> list) 
     { 
      super(context, R.layout.adapter_row_path, list); 
      this.context = context;  
      this.list = list; 
     } 

     @Override 
     public View getView(int position, View convertView, ViewGroup parent) { 

      View rowView = convertView; 
      PathHolder holder; 

      if(rowView ==null){ 
      LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);   
      rowView = inflater.inflate(R.layout.adapter_row_path, parent, false); 

      holder = new ViewHolder(); 
      holder.b1 = (Button) rowView.findViewById(R.id.b1); 
      holder.b2 = (Button) rowView.findViewById(R.id.b2); 

      rowView.setTag(holder); 

      }else { 
       holder = (ViewHolder) rowView.getTag(); 
      } 

      setRow(holder, position); 
      return rowView; 
      } 

      private void setRow(Holder holder, position){ 
       holder.b1.setOnClickListener(new OnClickListener() { 

       @Override 
       public void onClick(View v) { 
        // action on button 1 (you know also position here) 
       } 
      }); 

      holder.b2.setOnClickListener(new OnClickListener() { 

       @Override 
       public void onClick(View v) { 
        // action on button 2 (you know also position here) 
       } 
      }); 
      } 

    } 


    static class ViewHolder { 
     Button b1; 
     Button b2;  
    }