【问题标题】:Adding a new row on button click to a list view在按钮单击时添加新行到列表视图
【发布时间】:2011-09-03 21:14:12
【问题描述】:

我想在 android 的列表视图中单击添加按钮时添加一个新行。

谁能帮帮我?

这是我目前的代码:

public class prsnlhstry<EventArgs> extends Activity implements OnItemClickListener {

    public static ArrayList<String> arr_sort_textview1= null; 
    public static ArrayList<String> arr_sort_textview2=null;
    public static ArrayList<String> arr_sort_textview3=null;
    public Resources ApptResources= null;
    private ContextWrapper mycontext;
    tododata todo;
    int clickcounter = 0;



    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        ListView lv= (ListView)findViewById(R.id.listview);
        todo = new tododata(this);

        List<listObject> List = new ArrayList<listObject>();
             for(int i = 0; i <= 5; i++){
                listObject lo = new listObject();
                lo.grade =  Integer.toString(i);
                lo.reason = Integer.toString(i);
                lo.school = Integer.toString(i);
                List.add(lo);
             }

        CustomAdapter ca = new CustomAdapter(this); 
        lv = (ListView)findViewById(R.id.listview);
        lv.setAdapter(ca);
        lv.setOnItemClickListener(this);
        ca.notifyDataSetChanged();



        Button button = (Button) findViewById(R.id.btn);
        button.setOnClickListener(new OnClickListener(){
        public void onClick(View v) {
               Toast.makeText(prsnlhstry.this, "Row Added Successfully", Toast.LENGTH_SHORT).show();
            }
        });

   }  

    private class listObject {
    String grade;
    String school; 
    String reason;
    }
    public class CustomAdapter extends BaseAdapter {
        private LayoutInflater mInflater;

          public CustomAdapter(Context context) {

            mInflater = LayoutInflater.from(context);

                 }

          @Override
         public int getCount() {
              return todo.getLength();
        }
          @Override
            public Object getItem(int position) {
            return position;
        }
          @Override
            public long getItemId(int position) {
            return position;
        }
          @Override
            public View getView(int position, View convertView, ViewGroup parent) {

            ViewHolder holder;
            String temp = null;

            // to reinflate it. We only inflate a new View when the convertView supplied
            // by ListView is null.
            if (convertView == null) {
                convertView = mInflater.inflate(R.layout.grid_item, null);

           // Creates a ViewHolder and store references to the views
           // we want to bind data to.
                    holder = new ViewHolder();
                holder.textview1 = (TextView) convertView.findViewById(R.id.item2);
                holder.textview2 = (TextView) convertView.findViewById(R.id.item3);
                holder.textview3 = (TextView) convertView.findViewById(R.id.item4);


                convertView.setTag(holder);
            } else {

                holder = (ViewHolder) convertView.getTag();
            }

            holder.textview1.setText(todo.getgrade(position));
            holder.textview2.setText(todo.getschool(position));
            holder.textview3.setText(todo.getreason(position));

           return convertView;
        }

        }

        static class ViewHolder {
            TextView textview1;
            TextView textview2;
            TextView textview3;     
        }

        @Override
        public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                long arg3) {
            // TODO Auto-generated method stub

        }
       } 

【问题讨论】:

    标签: java android android-emulator


    【解决方案1】:

    只需将项目添加到您的列表并刷新适配器,没什么特别的。

    【讨论】:

      【解决方案2】:

      您需要在单击按钮时增加“tododata”数据结构,然后调用 notifyDataSetChanged() 方法:

          Button button = (Button) findViewById(R.id.btn);
                  button.setOnClickListener(new OnClickListener(){
                  public void onClick(View v) {
                         todo.addNewRow();
                         ca.notifyDataSetChanged();
      
                         Toast.makeText(prsnlhstry.this, "Row Added Successfully", Toast.LENGTH_SHORT).show();
                      }
                  });
      

      要编译上述代码,您需要将“ca”变量定义为final,或使其成为类成员。

      希望对你有帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-06-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多