【问题标题】:Android - delete a row from list view on button clickAndroid - 单击按钮时从列表视图中删除一行
【发布时间】:2013-09-12 21:44:04
【问题描述】:

我正在创建一个应用程序,其中数据是从条形码扫描仪获取的,该扫描仪从 id 进行识别,并通过 Web 服务显示来自数据库的详细信息。我目前正在使用具有文本视图和按钮的自定义列表,我想嵌入到文本视图中的数据正在正确显示...

我的问题是如何在单击按钮时从列表中删除特定行。

这是自定义适配器代码。

 public class MyCustomAdapter extends ArrayAdapter<String> 
     {
         public MyCustomAdapter(Context context, int textViewResourceId, ArrayList<String> items) 
         {
             super(context, textViewResourceId, items);
         }

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

             LayoutInflater inflater = FusionMain.this.getLayoutInflater();
             View row = inflater.inflate(R.layout.list_row, parent, false);


             return row;
         }
     } // end MyCustomAdapter

我应该在自定义适配器中创建什么其他功能?我是 android 开发的新手。如果您需要更多详细信息,我可以更新问题或代码。 请回复

【问题讨论】:

标签: android android-listview custom-adapter custom-lists


【解决方案1】:

要刷新您的适配器,只需删除 ArrayList 的元素并调用

notifyDataSetChanged()

在您的适配器中。

我认为你应该看看这个例子:

http://www.vogella.com/articles/AndroidListView/article.html

【讨论】:

    【解决方案2】:

    适配器的主要思想是您将 ArrayList 项传递给它,它们将显示在 AdapterView 上。

    带有位置参数的getView 方法将为列表中当前显示的每个元素运行。当您滚动列表时,您将获得更多 getView() 调用。 从 getView 方法中,您必须返回一个将显示在列表中的视图,但它必须已经填充了 DATA! 例如:

    @Override
         public View getView(int position, View convertView, ViewGroup parent)
         {
    
             LayoutInflater inflater = FusionMain.this.getLayoutInflater();
             View row = inflater.inflate(R.layout.list_row, parent, false);
             TextView myTextView = (TextView)row.findViewById(R.id.myTextviewId);
             myTextView.setText(items.get(position));
    
             return row;
         }
    

    当您想要更改列表时,您必须更改项目对象(例如,从此 ArrayList 中删除单个项目) 然后你必须使用myAdapter.notifyDatasetChanged() 方法。这将使您的 AdapterView(例如 ListView)再更新一次,并为所有可见位置再调用一次 getView 方法。

    【讨论】:

      【解决方案3】:

      简单必须需要从列表中删除项目并调用函数notifyDataSetChanged

       ImageButton dltbutton = (ImageButton) row.findViewById(R.id.removebtn);
              dltbutton.setOnClickListener(new View.OnClickListener() {
                  public void onClick(View v) {
                      myModel.remove(position);
                      notifyDataSetChanged();
                  }
              });
      

      在下面查看我的答案:-

      https://stackoverflow.com/a/39243875/1733810

      【讨论】:

        【解决方案4】:

        最简单的方法是重新创建适配器。

        public void onClick(View view){
        
           mItemsList.remove(numberToDelete);
           mListView.setAdapter(new MyCustomAdapter(this, mResId,mItemsList));
        }
        

        【讨论】:

        • 每次都重新创建适配器不是一个好主意。这将起作用,但根本不是最佳的。 notifyDatasetChanged() 方法用于在数据发生变化时更新 View。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多