2

私はカスタムリストビューを表示していて、リストダウン用の別のボタンとリストアップ用の別のボタンからリストをトラバースしたいので、ここで現在選択されているアイテムの位置を取得できるので、使用しています-

list.setSelection(newpostion);

しかし、指定された位置のハイライトを見ることができません。ここでは、リストは適切にトラバースされていますが、ユーザーは現在自分がどのリスト項目にいるのかを確認できません。特定のリスト項目の背景を強調表示または変更する方法を教えてください。

状態変更の背景のようなセレクターで試しましたが、うまくいきませんでした。実用的な解決策を教えてください。

リストアダプターのコードは次のとおりです-

package com.sho;

import java.util.ArrayList;
import java.util.HashMap;
import android.app.Activity;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageButton;
import android.widget.TextView;

public class list_adapter extends ArrayAdapter<HashMap<String,String>>
{
ArrayList<HashMap<String,String>> items;
LayoutInflater mInflater ; 
Context context;
int layoutResourceId; 

public list_adapter(Context context, int layoutResourceId, ArrayList<HashMap<String, String>> _list) 
{
        super(context, layoutResourceId, _list);
        this.layoutResourceId=layoutResourceId;
        this.items = _list;
        this.context=context;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) 
{
            View row = convertView;
            ViewHolder holder = new ViewHolder();
            if(row==null)
            {
                mInflater = ((Activity)context).getLayoutInflater();
                row = mInflater.inflate(R.layout.chapterdetails, parent, false);
                holder.name = (TextView) row.findViewById(R.id.chapterdata);


            }

            else
            {
                holder=(ViewHolder)row.getTag();

            }

            row.setTag(holder);
            row.setId(position);

       HashMap<String,String>  map=items.get(position);
       holder.name.setText(map.get("DESCRIPTION"));
        return row;
}

static class ViewHolder
{
    TextView name;
    ImageButton annotion,bookmark,edit;
}

}

リストをトラバースしたい場所からのボタンのコード、ここでリスト名は ls-

View earliest=new View(MainActivity.this);

                if(postion<a1&&postion<=a1-2) 
                {
                     postion++;
                     earliest=ls.getRootView().findViewById(postion);
                        earliest.setBackground(null);




                     View v=new View(MainActivity.this); 
                    v=ls.getRootView().findViewById(postion); 
                    v.setBackgroundColor(Color.RED);
                    previous.setBackgroundColor(Color.BLUE); // your list
                    previous=v;
                     } } }); 
4

2 に答える 2

0

フォーカス可能性に関連している可能性があります。フォーカス可能なオブジェクトを含むカスタムリストビューがある場合は、フォーカスできないようにしてください。

aButtonInYourListView.Focusable = false;
aButtonInYourListView.FocusableInTouchMode = false;

ListViewAdapterのすべてのボタン、imagebuttonsに対してこれを行います。これはxmlからも実行できますが、私の経験ではimagebuttonに対しては実行できません。安全を期すためにコードでそれを行ってください。

これにより、ListViewItemsをフォーカス可能にする必要があります。

于 2013-03-04T10:52:12.960 に答える
0

編集:設定後list.setSelection(newpostion);

このようにそのビューを取得します

View v=list.getSelectedView();

その後、同じロジックが続きます

あなたのコードは次のようになります

グローバル変数を作成する

View previous;

onCreate で初期化する

previous=new View(this);



 traverse_listdown.setOnClickListener(new OnClickListener() {
 @Override 
public void onClick(View v) { 
// TODO Auto-generated method stub 
System.out.println("down"); 
int a1=list.getCount();

if(postion<a1&&postion<=a1-2) {
 postion++; list.setSelection(postion);
 View v1=new View(MainActivity.this); 
v1=list.getSelectedView(); 
v1.setBackgroundColor(Color.RED);
previous.setBackgroundColor(Color.WHITE); // your list
previous=v1;
 } } }); 

これを試して、

このようなドローアブルセレクターを作成します

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:drawable="@drawable/pause_button"
          android:state_selected="true" />
    <item android:drawable="@drawable/play_button" />
</selector>

選択した色またはドローアブルを指定できます。

このようなグローバル変数を作成します

View previous;

初期化する

previious=new View(context);

リストアイテムがクリックされたときは、このように使用します

yourlist.setOnItemClickListener(new OnItemClickListener() {
            @Override
        public void onItemClick(AdapterView<?> arg0, View view, int arg2,long arg3) {
        previous.setSelected(false);                        
        view.setSelected(true);
        previous=view;

}
});
于 2013-03-04T11:19:55.467 に答える