0

API 8 で動作する必要があるプロジェクトに取り組んでいるので、最低限の API 10 以上が必要なため、行を強調表示する方法に関する多くの例が機能しないことがわかりました。

だから私は周りを見回して、OnListItemClickを介して蛍光ペンを機能させましたが、私の問題は、リストに複数のアイテムがある場合、複数のアイテムを選択できることです。これは私が望んでいるものではありません

次を使用して、行を強調表示および強調表示解除しました。

if (selectedrow == 0) {
   ((TextView)v).setBackgroundColor(Color.rgb(0, 153, 204)); 
   selectedrow = 1;
   oki.setEnabled(true);
   currpos = position;
   File fileselected = new File(pathi.get(currpos));

 } else {
  ((TextView)v).setBackgroundColor(Color.TRANSPARENT); 
  selectedrow = 0;
  oki.setEnabled(false);
   currpos = -1;

}

複数の行が強調表示されていることに気付いたとき、上記のコードの前に次のことを試しました。

if (currpos != -1 ) {
   ((ListView)l).smoothScrollToPosition(currpos);
   ((TextView)v).setBackgroundColor(Color.TRANSPARENT); 
   ((ListView)l).smoothScrollToPosition(position);
   selectedrow = 0;
 }

また、次のように上記を試しました。

if (currpos != -1 ) {
  ((ListView)l).setSelection(currpos);
  ((TextView)v).setBackgroundColor(Color.TRANSPARENT); 
  ((ListView)l).setSelection(position);
  selectedrow = 0;
 }

編集*

カスタムアダプターは現在機能しており、次のようになっていますが、ハイライターはまだ問題です。コードを投稿することで、これが明らかになることを願っています。

public class FileListAdapter extends ArrayAdapter<String>  {

     private List<String> itemsll; 

        public FileListAdapter(Context context, int row,
                List<String> iteml) {
            super(context,row,iteml);
            // TODO Auto-generated constructor stub
            this.itemsll = iteml;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {

            View viewnull = convertView;
            if (viewnull == null) {
                LayoutInflater vrow;
                vrow = LayoutInflater.from(getContext());

                viewnull = vrow.inflate(R.layout.row, null);
            }
            String currow = itemsll.get(position);
            TextView rowtext = (TextView)viewnull.findViewById(R.id.rowtext);
            rowtext.setText(currow);

            if (currpos == position) {
                rowtext.setBackgroundColor(Color.BLUE);
            }

            return viewnull;
        }


        public void setSelectedPosition( int pos )
        {
            currpos = pos; // selectedPos is global variable to handle clicked position
            // inform the view of this change
            notifyDataSetChanged();
        }
     }

次に、次のように onItemClick を追加しました。

public void onItemClick( AdapterView<?> arg0,View arg1, int arg2, Long arg3) {

         int pos = arg2;
         fl.setSelectedPosition(pos);
     }

解決しました。
onListItemClick と onItemClick を使用できないことをすぐに登録し、クラスが ListActivity であるため、Listview lw = getListView() を使用してから onItemClick メソッドを使用する必要がありました

4

2 に答える 2

0

あなたのアプローチは間違っています。ほぼすべてのAPIバージョンで機能するセレクターと呼ばれるものがあり、私はAPIレベル8でそれを行いました。これを試す例もあります

これがアダプターのレイアウトです

<?xml version="1.0" encoding="UTF-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="100dp"
    android:background="@drawable/rowselector" >

   . . . . . . 

</RelativeLayout>

実際にはセレクターである背景を設定していることがわかります

私のrowselector(これをドローアブルに保持)

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
    <item android:state_enabled="true" 
     android:state_pressed="true" android:drawable="@drawable/left_navbg_hover" />
    <item android:state_enabled="true"
     android:state_focused="true" android:drawable="@drawable/left_navbg_hover" />
    <item android:state_enabled="true"
     android:state_selected="true" android:drawable="@drawable/left_navbg_hover" />
    <item
     android:drawable="@drawable/left_navbg" />
</selector>

ここで left_navbg_hover と left_navbg は使用した画像です。

それを試してみてください。

于 2013-07-26T07:18:05.420 に答える
0

カスタム リスト アダプターを使用している場合は、1 つのことを行うことができます。

次のように、アダプタ クラスに public メソッドを 1 つ作成します。

public void setSelectedPosition( int pos )
    {
        selectedPos = pos; // selectedPos is global variable to handle clicked position
        // inform the view of this change
        notifyDataSetChanged();
    }

getView メソッドで、背景色を変更します。

 if ( selectedPos == position )
    {
            ((TextView)v).setBackgroundColor(Color.rgb(0, 153, 204)); 
    }

onItemClick メソッド呼び出しアダプター メソッド:

@Override
    public void onItemClick( AdapterView<?> arg0, View arg1, int arg2, long arg3 )
    {
        int position = arg2;

        youradapter.setSelectedPosition( position );

    }
于 2013-07-26T07:18:45.997 に答える