1

実際には、1 つの画面に MapActivity と ListActivity があります。ユーザーがマップ上のピンの 1 つをクリックすると、クリックされた場所がリストの一番上になり、背景と仕切りの色が異なります。

クリックしたピンの緯度を送信し、getView() で取得することを開始します。クリックした緯度が最初のエントリで表示された緯度と同じである場合、何かが実行されます。

ListView の最初のエントリを特定の背景にすることができましたが、リストを下にスクロールすると、他のエントリの背景も変更されます。

これが私の方法です:

double selectedLat = WWHApplication.getSelectedLatitude();
            DecimalFormat df = new DecimalFormat("#.#####");

            String dLat = df.format(lat);
            String sLat = df.format(selectedLat);
            if (position == 0) {
                if (dLat.equals(sLat)) {
                    feedViewHolder.layout
                            .setBackgroundResource(R.drawable.list_segment_selected);

                }
            }

最初のアイテムのみで、仕切りの色と ListView の背景を変更する方法は? この場合、誰かが私を助けてくれれば本当に感謝しています。他の解決策も受け入れます。ありがとうございました。

更新:ここにgetView()方法があります

@Override
        public View getView(final int position, View convertView,
                ViewGroup parent) {
            layoutInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            FeedViewHolder feedViewHolder = null;
            final VideoLocationDB vidLocation = videoLocationsDB[position];
            String url = vidLocation.documentary_thumbnail_url;
            String name = vidLocation.name;
            String title = vidLocation.name;
            String desc = vidLocation.text;
            double lat = vidLocation.latitude;
            double lng = vidLocation.longitude;
            String distance = calculateDistance(lat, lng);

            // System.out.println("ON LOC DISTANCE: "+distance);
            if (convertView == null) {

                // convertView = LocationsListActivity.this.getLayoutInflater()
                // .inflate(R.layout.listitems, null, true);
                convertView = layoutInflater.inflate(R.layout.listitems,
                        parent, false);
                feedViewHolder = new FeedViewHolder();
                feedViewHolder.layout = (LinearLayout) convertView
                        .findViewById(R.id.list_bg);
                feedViewHolder.titleView = (TextView) convertView
                        .findViewById(R.id.txt_title);
                feedViewHolder.descView = (TextView) convertView
                        .findViewById(R.id.txt_list_desc);
                feedViewHolder.more = (TextView) convertView
                        .findViewById(R.id.txt_more);
                feedViewHolder.distanceView = (TextView) convertView
                        .findViewById(R.id.txt_distance);
                feedViewHolder.v = (ImageView) convertView
                        .findViewById(R.id.image);

                Typeface fontRegular = Typeface.createFromAsset(getAssets(),
                        "miso.otf");
                feedViewHolder.titleView.setTypeface(fontRegular);
                Typeface fontLight = Typeface.createFromAsset(getAssets(),
                        "miso-light.otf");
                feedViewHolder.descView.setTypeface(fontLight);
                feedViewHolder.more.setTypeface(fontLight);
                feedViewHolder.distanceView.setTypeface(fontRegular);

                convertView.setTag(feedViewHolder);

            } else {
                feedViewHolder = (FeedViewHolder) convertView.getTag();
            }

            feedViewHolder.v.setTag(url);
            loader.DisplayImage(url, LocationsListActivity.this,
                    feedViewHolder.v, name);

            double selectedLat = WWHApplication.getSelectedLatitude();
            DecimalFormat df = new DecimalFormat("#.#####");

            String dLat = df.format(lat);
            String sLat = df.format(selectedLat);
            if (position == 0) {
                if (dLat.equals(sLat)) {
                    feedViewHolder.layout
                            .setBackgroundResource(R.drawable.list_segment_selected);
                }
            }

            feedViewHolder.titleView.setText(title.toUpperCase());
            feedViewHolder.descView.setText(desc);
            feedViewHolder.more.setText(getString(R.string.de_list_more));
            feedViewHolder.distanceView.setText(distance);

            return convertView;
        }
4

1 に答える 1

1

ストックListViewがその動作を実際にサポートしているとは思わない。

ListView の仕切りを 0 に設定し、仕切りを自分で「プレーン」行として追加することで、それを偽造することができます。行を好きなように見せることができるので、おそらく、好きな種類の仕切りのように見えるビューを膨らませて、それを各項目の間にあるリストに追加することができます。アダプターの getView() メソッドでそのロジックを実装できるはずです。

編集:

次のように色が変わっている場合は、elseブロックを追加すると修正されるはずです。

if (position == 0) {
    if (dLat.equals(sLat)) {
        feedViewHolder.layout.setBackgroundResource(R.drawable.list_segment_selected);
    }
}else{
    feedViewHolder.layout.setBackgroundResource(android.R.drawable.list_selector_background);

}

「list_normal」をデフォルトの背景ドローアブルに置き換えます。おそらく設定していない場合、必要なものは次のようなものですandroid.R.drawable.list_selector_background。正しい名前を見つけるには、sdk res drawable フォルダーを調べる必要があるかもしれません。正確なタイトルが間違っている可能性があります。確認しましたが、それがあなたが必要としているものだと思います。しかし、私はデバイスでそれをテストしませんでした。

于 2012-06-01T14:59:28.677 に答える