【问题标题】:Delete or hide a row in a list view删除或隐藏列表视图中的一行
【发布时间】:2014-08-28 09:08:40
【问题描述】:

大家好,我有一个关于在列表视图中删除或隐藏列表的问题,例如 javascript 中的 .hide() 。我知道这里有很多关于它的答案,但似乎它没有回答我的问题。为了解释清楚,下面是我的代码的一部分。

    package sample.wew.wew;

    import info.androidhive.sqlite.model.Message;

    import java.util.ArrayList;
    import java.util.List;

    import android.content.Intent;
    import android.database.Cursor;
    import android.os.Bundle;
    import android.support.v4.app.Fragment;
    import android.util.Log;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.AdapterView;
    import android.widget.ArrayAdapter;
    import android.widget.ListAdapter;
    import android.widget.ListView;
    import android.widget.SimpleCursorAdapter;
    import android.widget.TextView;
    import android.widget.Toast;
    import android.widget.AdapterView.OnItemClickListener;

    public class QuestionsSent extends Fragment {

        private static final String TAG = "Question";

        private static List questions;
        protected ListAdapter adapter;
        ListView theList;   

        @SuppressWarnings("deprecation")
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

            View view;

            view = inflater.inflate(R.layout.questions_main_layout, container, false);
            AskdDatabaseHelper msg_db = new AskdDatabaseHelper(getActivity());

            Cursor cursor = msg_db.FetchQuestion("S");

            String[] fromFieldNames = new String[] { "msg_from_user", "msg_message" };
            int[] toViewIDs = new int[] { R.id.tvMessage, R.id.tvMessageSender };

            adapter = new QuestionsCursorAdapter(getActivity(), // Context
                            R.layout.question_detail, // Row layout template
                            cursor, // cursor (set of DB records to map)
                            fromFieldNames, // DB Column names
                            toViewIDs // View IDs to put information in
            );

            theList = (ListView) view.findViewById(R.id.list);
            theList.setAdapter(adapter);
            theList.setOnItemClickListener(new AdapterView.OnItemClickListener() {

                @Override
                public void onItemClick(AdapterView<?> parent, View view,
                                int position, long id) {
                    /*
                    Log.v(TAG, ": NAAY GI CLICK");
                    Intent intent = new Intent(getActivity(), Sent_details.class);
                    Cursor cursor = (Cursor) adapter.getItem(position);
                    Log.d("TAG", "" + adapter.getItem(position));
                    intent.putExtra("MESSAGE_ID", cursor.getString(cursor.getColumnIndex("msg_message")));
                    startActivity(intent);
                    */

                    // HERE IS WHERE I WANT TO PUT MY CODE TO DELETE OR HIDE A LIST
                }
            });      

            if(adapter.isEmpty()){
                view = inflater.inflate(R.layout.fragments_question_new, container, false);
                ((TextView)view.findViewById(R.id.textView)).setText("No Sent Questions");
            }

            return view;

        }

}

【问题讨论】:

  • 您想从列表中删除随机行/记录吗?我说的对吗?
  • @Darkie 我想删除我点击的行。
  • 所以我假设您正在从数据库的列表视图中显示记录?
  • 如果可以使用自定义适配器,可以为点击位置的对象设置任意标志,调用notifyDatasetchanged();在getView()中,需要通过检查条件来显示,getCount()也一样
  • @Jithu 你能给我一个示例代码吗?我是android的初学者

标签: android simplecursoradapter onitemclick


【解决方案1】:

在这里你可以做这样的事情,它会以对话框的形式询问你是否删除记录,点击是后它会删除记录。希望对你有帮助...

userList.setOnItemLongClickListener(new OnItemLongClickListener() 
    {
        public boolean onItemLongClick(AdapterView<?> arg0, View arg1,final int arg2, long arg3)
        {

        build = new AlertDialog.Builder(HomePage.this);
        build.setTitle("Delete " + FirstName.get(arg2));
        build.setMessage("Do you want to delete ?");
        build.setPositiveButton("Yes", new DialogInterface.OnClickListener() 
        {
            public void onClick(DialogInterface dialog, int which)
            {
            Toast.makeText(getApplicationContext(), FirstName.get(arg2) + " " + LastName.get(arg2) + " is deleted.", 3000).show();
                dataBase = mHelper.getWritableDatabase();
                dataBase.delete(DatabaseActivity.TABLE_NAME, DatabaseActivity.KEY_ID + "=" + userId.get(arg2), null);

                dataBase.close();
                displayData();
                dialog.cancel();
            }
                    });

            build.setNegativeButton("No", new DialogInterface.OnClickListener() 
            {
                public void onClick(DialogInterface dialog, int which) 
                {
                    dialog.cancel();
                    }
                });
            AlertDialog alert = build.create();
            alert.show();
            return true;
        }
    });
}

【讨论】:

    【解决方案2】:

    将这些行放在您的 onlistitemclick 中

    int count = youradapter.getCount();
    for (int i = count-1; i >= 0; i--) 
    { 
    adapter.remove(adapter.getItem(i).postion);
     }
    

    并在beloo中添加这一行

    adapter.notifyDataSetChanged();
    

    【讨论】:

    • 谢谢。但它不工作。将出现一个错误,提示“ListAdapter 类型的方法 remove(int) 未定义”。我以前试过这个,但没有运气。
    • 检查我编辑的答案并在发生错误后放入您的 logcat 文件
    • 错误提示“位置无法解析或不是字段”
    猜你喜欢
    • 2015-05-23
    • 1970-01-01
    • 1970-01-01
    • 2014-06-30
    • 1970-01-01
    • 2015-05-15
    • 2019-01-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多