これは以前に尋ねられましたが、私にとってはうまくいく答えがありませんでした(そして、明らかに、受け入れられた/唯一の答えについてのコメントが与えられました)。
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);
HashEntry
Name
は単純に 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) {
}
});