0

Androidを使用してアプリケーションを開発していますListView

ListViewそれぞれに1つのファイルがありますListItem。ここでは、 に設定onItemClickしましたListView。そのため、ユーザーがクリックすると、ListItem電子メール アプリケーションが開き、特定のファイルが電子メールに添付されます。その単一のFile場合、これは実装され、正常に機能します。

複数のファイルをメールに添付したい。つまり、CheckBoxListItem項目とチェック項目を実装して、メールに添付する必要があります。

複数のファイルをチェックし、単一のButton. しかし、やり方がわからない。

4

3 に答える 3

3

ListAdapter で SparseBooleanArray を作成します

private SparseBooleanArray checkStatus;

この SparseBooleanArray は、チェックされた項目を格納します。getView で次の操作を行います

@Override
public View getView(int position, View view, ViewGroup parent) {
    ViewCache viewCache;
    if (view == null){
        viewCache = new ViewCache();
        view = layoutInflater.inflate(R.layout.list_box, null, false);
        viewCache.checkBox = view.findViewById(R.id.check_box);            
        viewCache.checkBox.setOnCheckedChangeListener(onCheckedChangeListener);
        //other views in the list box
        ...........
    }
    vewCache = (ViewCache)view.getTag();
    viewCache.checkBox.setTag(position);
    viewCache.checkBox.setChecked(isChecked(position));
    //set other views
    ........
}

これはViewCacheクラスです

private static class ViewCache{        
    CheckBox checkBox;
    //other views in the list box
    .......
}

このメソッドは、位置がチェックされているかどうかをチェックします

private boolean isChecked(int position){
    return checkStatus.get(position, false);
}

これは onCheckChangeListener です

CompoundButton.OnCheckedChangeListener onCheckedChangeListener = new CompoundButton.OnCheckedChangeListener() {
    @Override
    public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
        checkStatus.put(((Integer)compoundButton.getTag()), b);
    }
};

最後に、チェックされた項目を SparseBooleanArray checkStatus から取得できます。それがあなたを助けると思います。

于 2012-09-14T15:35:51.703 に答える
1

独自のArrayAdapterを実装してみることができます。ファイルオブジェクトの配列で初期化し、リストビューで使用します。

次に、アダプタによって表示され、外部から操作できるインデックスのリストを作成します。あなたのonItemClick方法では、クリックされたアイテムの位置があります。そのリストにある場合は削除し、そうでない場合は挿入します。そのリストを呼びましょうselection

次に、アダプタのgetViewメソッドで、チェックボックスが内部にあるビューを作成します。ここでも、引数として渡されるため、現在の位置がわかります。内の位置の存在に応じてチェックボックスの状態を設定しますselection

最後に、ボタンのonClickを実装して、ファイルオブジェクトに対して行うことはすべて、位置がにあるfile_arrayのオブジェクトに対してのみ実行されるようにしますselection

お役に立てば幸い

于 2012-09-14T15:33:25.740 に答える
1

上記の回答で、Sreejith は、SparseBooleanArray を使用して、チェックされた項目の状態をリスト ビューに保存する方法について適切に説明しています。これにより、問題の最初の部分が解決されます。
これらのアイテムの状態を他のアクティビティに渡すことに関する 2 番目の部分は、Application クラスを使用して実現できます。
アプリケーション クラス: アプリケーション
のグローバルな状態を維持する必要がある人のための基本クラス。複数のアクティビティからアクセスする必要があるグローバル変数などのデータを保存したい場合があります。アプリケーション内のあらゆる場所にある場合もあります。この場合、Application オブジェクトが役に立ちます。

これのサンプルコードは次のとおりです。

public class TopClass extends Application {
private static TopClass topClass;

public TopClass getInstance()
{
    return topClass;
}

@Override
public void onCreate ( )
{
    super.onCreate();
    topClass = this;
}

public ArrayList<String> arrList = new ArrayList<String>();   

}

アプリケーション マニフェスト ファイルの application タグの下にタグ android:name="TopClass" を設定する必要があります。このようなもの:

<application
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:name="TopClass" >
    ....
    ....

アクティビティからアクセスする方法は次のとおりです。

TopClass top = (TopClass)getApplicationContext();
top.arrList.add("StackOverflow");

同様に、他のアクティビティから同じ変数にアクセスできるようになりました。

于 2012-09-14T18:30:08.240 に答える