0

BaseAdapterを使用してカスタムリストビューを用意しました。クリックイベント時にリストビューの選択したアイテムの色を変更したいと思います。また、複数の項目を選択する必要があります。ここで私は1つのデモを提供しています:

ここに画像の説明を入力してください

選択したアイテムの色はオレンジです。これは単なるデモ画面です。選択したリストアイテムの背景色全体を変更する方法を知っている人がいる場合は、レビューを投稿してください。ありがとう。

私はこのBaseAdapterクラスを使用しています:

public class MyListAdapter extends BaseAdapter {

private Activity activity;
private String[] title, artist, duration, rowNumber;
private static LayoutInflater inflater=null;
ViewHolder holder;

View vi;

public MyListAdapter (Activity context, String[] songTitle,String[] songArtist, String[] songDuration )
{
   try
   {
    activity = context;
    title = songTitle;
    artist = songArtist;
    duration = songDuration;

    rowNumber = new String[title.length];
    for(int i=0;i<title.length; i++){
        rowNumber[i] = Integer.toString(i+1);
    }
    inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

   }
   catch (NullPointerException e) 
   {
       e.printStackTrace();
   }
}

public int getCount() {
    return title.length;
}

public Object getItem(int position) {
    return position;
}

public long getItemId(int position) {
    return position;
}

public static class ViewHolder{
    private TextView txtSongNumber, txtSongTitle, txtSongArtist, txtSongDuration;

}

public View getView(int position, View convertView, ViewGroup parent) 
{
    try
    {
        vi=convertView;

       // System.out.println("Value of position"+position);
        if(convertView==null)
        {
            vi = inflater.inflate(R.layout.list_songs, null);
            holder=new ViewHolder();
            holder.txtSongNumber = (TextView)vi.findViewById(R.id.txtSongNumber);
            holder.txtSongTitle = (TextView)vi.findViewById(R.id.txtSongTitle);
            holder.txtSongArtist = (TextView)vi.findViewById(R.id.txtSongArtist);
            holder.txtSongDuration = (TextView)vi.findViewById(R.id.txtSongDuration);

            vi.setTag(holder);
        }
        else

            holder=(ViewHolder)vi.getTag();

        holder.txtSongNumber.setText(rowNumber[position]);
        holder.txtSongTitle.setText(title[position]);
        holder.txtSongArtist.setText(artist[position]);

        holder.txtSongDuration.setText(duration[position]);

    }
    catch (Exception e) 
    {
        e.printStackTrace();
    }
    return vi;
}

}

4

3 に答える 3

2

その非常に単純な...次のコードを試してみてください...

リストアダプタの場合:

最初に整数配列を定義します

ArrayList<Integer> itemPos = new ArrayList<Integer>();

次に、getViewメソッドでこのコードを使用します。

        if (itemPos.contains(position)) {
            holder.txtOne.setTextColor(Color.BLUE);
        } else {
            holder.txtOne.setTextColor(Color.WHITE);
        }

次に、テキストビューのクリックイベントでこのコードを使用します。

            if (!itemPos.contains(position)) {
                holder.txtOne.setTextColor(Color.BLUE);
                itemPos.add(position);
                notifyDataSetChanged();
            } else {
                holder.txtOne.setTextColor(Color.WHITE);
                notifyDataSetChanged();
                int po = itemPos.indexOf(position);
                itemPos.remove(po);
            }
于 2012-05-23T10:13:09.820 に答える
0

getViewと呼ばれるコアメソッドを持つBaseAdapterを実装したので、アイテムの状態をBaseAdapterに簡単に保存できます。たとえば、リストを使用して状態を保存できます。

次に、 http://developer.android.com/reference/android/widget/AdapterView.html#setOnClickListener (android.view.View.OnClickListener)で説明されているように、ListViewのリスナーを実装する必要があります。OnItemClickListenerのドキュメントは、 http: //developer.android.com/reference/android/widget/AdapterView.OnItemClickListener.htmlにあり、クリックの位置を取得できます。

最後に、クリック時のイベント後にアイテムの状態を変更し、アダプターでnotifyDataSetChanged()を呼び出して、データが変更されたことを通知すると、選択されたアイテムが更新されます。

于 2012-05-23T05:41:31.457 に答える
0

「ご協力いただきありがとうございます。これですべて完了しました。リスト内の1つのアイテムをクリックすると、別のアイテムも自動的に選択されることがわかりました。BaseAdapterに問題はありますか?」

この問題では、リストビュー行の状態を保存する必要があります。その行が選択されているかどうかをgetviewで確認し、選択されているかどうかを確認してから、行の色を選択済みとして設定します。行を選択または選択解除するときも、状態を保存する必要があります。チェックボックスの代わりに同様の例を示します。あなたの場合は行が表示されます...リンクを提供するのに役立つことを願っています...。

すべてのチェックボックスの状態を取得し、チェックされた項目の値をarraylistに追加するボタンを実装するにはどうすればよいですか?

于 2012-05-23T05:58:26.867 に答える