0

私はAndroidにかなり慣れていないので、いくつかのガイダンスが必要です。

これまでに2つの活動があります。最初のものには、ActionBarとListViewが含まれています。ListViewにTextViewとCheckBoxを含む行を入力したいと思います。テキストは、データベースから読み取られたユーザー名で表されます。ActionBarには、「新規」および「削除」のアクション用のボタンがあります。「new」は、データベースに新しいユーザーを追加する新しいアクティビティを開きます。削除アクションは、リストとデータベースからチェックされたエントリを削除する必要があります。画面:

主な活動: http: //imgur.com/ILljQ

プロファイルアクティビティを作成します:http://imgur.com/EbpD3

これらを取得するために、データベースにはSQLiteHelperとデータソースを使用し、ListViewにはカスタムArrayAdapterを使用しました。以下にリストされている1つの問題といくつかの懸念があります。

1。問題:新しいユーザーを追加すると、戻るボタンを使用してアプリを終了した後にのみ、ListViewに変更が表示されます。

2。カスタムArrayAdapterはこれに適したソリューションですか、それともCursorAdapterを使用する必要がありますか?クリックすると、リストアイテムは、それに関連付けられた情報を別のアクティビティ/フラグメントに使用する必要があります。以下は私のカスタムアダプターです。現在は機能していますが、次のステップは削除アクションを実装することであり、それをどのように行うのか完全にはわかりません。これは私がアドバイスを必要とするところです。ありがとうございました!

    public class CustomUserAdapter extends ArrayAdapter<UserProfile>{

        ArrayList<UserProfile> users;
        private LayoutInflater inflater;

        public CustomUserAdapter(Context context, ArrayList<UserProfile> users) {
        // TODO Auto-generated constructor stub
        super(context, R.layout.users_list_row, users);
        this.users = users;
        inflater = LayoutInflater.from(context);
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
        UserProfile user = users.get(position);
        CheckBox checkBox;
        TextView textView;

        if(convertView == null){
            convertView =  inflater.inflate(R.layout.users_list_row, null);
            checkBox = (CheckBox) convertView.findViewById(R.id.checkElement);
            textView = (TextView) convertView.findViewById(R.id.textElement);

            //tag row
            convertView.setTag(new UserHolder(textView, checkBox));
        } else {
            UserHolder userHolder = (UserHolder) convertView.getTag();
            checkBox = userHolder.getCheckBox();
            textView = userHolder.getUserText();
        }

        //tag checkbox
        checkBox.setTag(user);

        //checkbox listener
        checkBox.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
            }
        });

        checkBox.setChecked(false);
        textView.setText(user.getUsername());

        return convertView;
            }
      }
4

2 に答える 2

1

1)配列リストを変更した後、「adapter.notifyDataSetChanged();」を呼び出すことを忘れないでください。リストビューにリンクされているアダプタ上

2)arrayadapterは問題なく動作するはずです。配列リストから連絡先を削除するときは、アダプターでnotfiydatasetchangedを再度呼び出すことを忘れないでください。また、オブジェクトのSQLエントリを削除するには、SQLiteデータベースを参照できるIDまたは何らかのIDが必要になることに注意してください(ID、自動インクリメントが標準です)

これは、各アイテムにリスナーを実装し、ダイアログを使用して削除する例です。

list.setOnItemClickListener(new OnItemClickListener() {

        public void onItemClick(AdapterView<?> arg0, View arg1, final int arg2, long arg3) {
            // TODO Auto-generated method stub
            AlertDialog.Builder dialog = new AlertDialog.Builder(ContactExampleActivity.this);
            dialog.setTitle("title");
            dialog.setMessage("message");
            dialog.setPositiveButton("delete", new DialogInterface.OnClickListener(){
                public void onClick(DialogInterface dialog, int which) {
                    //delete from array and delete from sqlite database here

                    adapter.notifyDataSetChanged();
                }
            });
于 2012-10-02T22:58:52.177 に答える
0

問題:新しいユーザーを追加すると、戻るボタンを使用してアプリを終了した後にのみ、ListViewに変更が表示されます。

新しいユーザーをArrayList()に追加したらusers、必ずアダプターを呼び出しnotifyDataSetChanged()てください。

カスタムArrayAdapterはこれに適したソリューションですか、それともCursorAdapterを使用する必要がありますか?

UserProfileがかなり軽量で、メソッドがない場合(つまり、データだけの場合)、CursorAdapterにはいくつかの優れた利点がある可能性があります。それ以外の場合は、ArrayAdapterを使用します。

クリックすると、リストアイテムは、それに関連付けられた情報を別のアクティビティ/フラグメントに使用する必要があります。以下は私のカスタムアダプターです。現在は機能していますが、次のステップは削除アクションを実装することであり、それをどのように行うのか完全にはわかりません。これは私がアドバイスを必要とするところです。

削除ボタンをどのように実装するかは、上記のコードからは明らかではないいくつかの要因によって異なります。チェックボックスリスナーを使用して選択されたアイテムを追跡し、ゴミ箱アイコンがクリックされたときにチェックされたすべてのアイテムを削除することができます。notifyDataSetChanged()この場合も必ず行ってください。

于 2012-10-02T22:58:33.847 に答える