0

これは以前に尋ねられましたが、私にとってはうまくいく答えがありませんでした(そして、明らかに、受け入れられた/唯一の答えについてのコメントが与えられました)。

ListViewリスト内の各項目に対して長押ししてコピーする機能を実装しました。を設定する独自のアダプターでリストに入力していますOnLongClickListenerが、アイテムをタッチアンドホールドしてもまったく強調表示されず、フェードしないことを除いて、正常に機能しています。にイベントを設定しておらず、アダプターから戻っListViewたときに他のイベントも設定していません。View

wrap_contentを使用しない、クリック可能を false に設定する、XML から完全に削除するなど、いくつかの修正について読みました。何も影響はありませんでした。ロング クリック リスナーを削除すると、クリックはアニメーション化されますが、フェード ロング クリックはアニメーション化されないことに気付きました。

ListView アイテムで長いクリック フェード アニメーションを保持するにはどうすればよいですか?

参考までに: アプリは Gingerbread (2.3.3) をターゲットにしています

編集:

私は単純なハッシュ計算機を書いています。次のような 1 つのアクティビティがあります。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <EditText
        android:id="@+id/Input"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"
        android:ems="10"
        android:inputType="text">
        <requestFocus/>
    </EditText>
    <Button
        android:id="@+id/Hash"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentRight="true"
        android:layout_below="@id/Input"
        android:onClick="StartHashes"
        android:text="@string/HashButtonText"/>
    <ListView
        android:id="@+id/HashList"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentRight="true"
        android:layout_below="@id/Hash">
    </ListView>
</RelativeLayout>

私の onCreate メソッドからの関連コード:

    Adapter = new HashEntryAdapter(this, Entries);// Entries is Vector<HashEntry>
    ListView list = (ListView)findViewById(R.id.HashList);
    list.setAdapter(Adapter);

HashEntryNameは単純に 2 つの文字列を含むクラスです: ハッシュの名前と、それぞれand と呼ばれるハッシュの結果の出力ですValue。は次のHashEntryAdapterとおりです。

public class HashEntryAdapter extends ArrayAdapter<HashEntry> {

    private Context context;

    public HashEntryAdapter(Context context, List<HashEntry> objects) {
        super(context, R.layout.hashitem, objects);
        this.context = context;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        //data from your adapter
        HashEntry entry = getItem(position);
        //we want to reuse already constructed row views...
        if(convertView == null) {
            convertView = LayoutInflater.from(context).inflate(R.layout.hashitem, null);
            convertView.setOnLongClickListener(new OnLongClickListener() {
                @Override
                public boolean onLongClick(View v) {
                    HashEntry entry = (HashEntry)v.getTag();
                    ClipboardManager clipboard = (ClipboardManager)v.getContext().getSystemService(Context.CLIPBOARD_SERVICE);
                    clipboard.setText(entry.Value);
                    Toast.makeText(context, entry.Name + " copied to clipboard", Toast.LENGTH_SHORT).show();
                    return true;
                }
            });
        }
        convertView.setTag(entry);

        TextView Name = (TextView)convertView.findViewById(R.id.HashName);
        TextView Value = (TextView)convertView.findViewById(R.id.HashValue);

        Name.setText(entry.Name);
        Value.setText(entry.Value);

        return convertView;
    }
}

最後に、hashitem.xml は、黒のハッシュ値の上に灰色のハッシュ名を配置する単純なレイアウトです。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <TextView
        android:id="@+id/HashName"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"
        android:text="@string/HashNameFiller"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:textColor="@color/DarkGray"/>
    <TextView
        android:id="@+id/HashValue"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/HashName"
        android:layout_centerHorizontal="true"
        android:text="@string/HashValueFiller"
        android:textAppearance="?android:attr/textAppearanceMedium"/>
</RelativeLayout>

vikki の OnCreateContextMenu:

    list.setOnCreateContextMenuListener(new OnCreateContextMenuListener() {
        @Override
        public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
        }
    });
4

2 に答える 2

1

会話スレッドを削除したい場合は、ストック メッセージング アプリが ICS で行うように onCreateContextMenu を使用できます。ContextMenuInfo を AdapterContextMenuInfo にキャストすると、onLongClickListener と同じように ID と位置を取得できます。

import android.widget.AdapterView.AdapterContextMenuInfo

...

list.setOnCreateContextMenuListener(new OnCreateContextMenuListener() {
    @Override
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
        AdapterContextMenuInfo contextInfo = (AdapterContextMenuInfo) menuInfo;
        int position = contextInfo.position;
        long id = contextInfo.id;
        // the child view who's info we're viewing (should be equal to v)
        View view = contextInfo.targetView;
    }
});
于 2012-10-16T14:31:37.977 に答える
0

リストビューにonlongclicklistenerを設定し、アダプターの外部で宣言するリストビューに設定します

したがって、アダプタの各セルに onlongclicklistener がある代わりに、代わりに listview を使用します。

listview.setOnLongClickListener(){new OnLongClickListener....
于 2012-10-11T21:19:58.657 に答える