7

独自のアダプターをコーディングし、ListView を介して ListActivity に追加しました。独自のアダプタを作成した理由は、リスト エントリのレイアウトを変更する必要があったためです。リストのすべてのエントリに、3 つの TextView があります。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="?android:attr/listPreferredItemHeight"
android:padding="6dip">
<TextView
    android:id="@+id/myNr"
    android:layout_width="40dip"
    android:layout_height="fill_parent"
    android:layout_marginRight="15dip"
    android:text="id" 
    android:textSize="25dip"
    android:background="#333333"
    android:gravity="center_horizontal"/>
<LinearLayout
    android:orientation="vertical"
    android:layout_width="0dip"
    android:layout_weight="1"
    android:layout_height="fill_parent">
    <TextView
        android:id="@+id/editor"
        android:layout_width="fill_parent"
        android:layout_height="0dip"
        android:layout_weight="1"
        android:gravity="center_vertical"
        android:text="Editor: " />
    <TextView
        android:id="@+id/date"
        android:layout_width="fill_parent"
        android:layout_height="0dip"
        android:layout_weight="1" 
        android:singleLine="true"
        android:ellipsize="marquee"
        android:text="Date: " />
</LinearLayout>

次に行ったのは、「onListItemClick-Methode」を実装することでした。その後、次のコードで onListItemLongClick - リスナーを実装しました。

私が追加したアクティビティのonCreateで:

 registerForContextMenu(getListView());

次に、次のメソッドを追加しました:

Override
public void onCreateContextMenu(ContextMenu menu, View view, ContextMenuInfo menuInfo){
         AdapterView.AdapterContextMenuInfo info;
         info = (AdapterView.AdapterContextMenuInfo) menuInfo;
            long id = getListAdapter().getItemId(info.position);
        }

ここで、「id」はリスト内の項目のインデックスです。この ListItem の id="myNr で texview のテキストを取得したいのですが、このテキストを取得する方法はありますか?

4

12 に答える 12

18

viewはリスト項目なので、次のことができます

String s =(String) ((TextView) view.findViewById(R.id.myNr)).getText();
于 2009-11-12T19:58:17.457 に答える
9

BaseAdapterを次のように拡張する場合は、テキストビューを参照するだけです

Listener = new OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position,
            long id) {

TextView tx =(TextView)view.findViewById(R.id.text);
            String s = tx.getText().toString();
            Log.d(TAG, "string : "+s);
于 2011-09-15T10:24:41.673 に答える
5

ItemLongClickListener を設定する別の方法を見つけました。したがって、表示しているテキストを取得する方法も見つけました。

ListView lv = getListView();
lv.setOnItemLongClickListener(new OnItemLongClickListener(){
@Override
public boolean onItemLongClick(AdapterView<?> arg0, View arg1,int row, long arg3) {
   String[] tmp = (String[]) arg0.getItemAtPosition(row);
   //tmp[0] ist the Text of the first TextView displayed by the  clicked ListItem 
   return true;
   }});
于 2009-11-15T16:45:19.313 に答える
3

私が見つけた最良の解決策は次のとおりです。

@Override  
        public void onCreateContextMenu(ContextMenu menu, View view,ContextMenuInfo menuInfo) {  
        super.onCreateContextMenu(menu, view, menuInfo);  
        AdapterView.AdapterContextMenuInfo info =     (AdapterView.AdapterContextMenuInfo)menuInfo;

        ViewGroup vg = (ViewGroup) view;
        View children = vg.getChildAt(info.position);
        TextView child = (TextView) children.findViewById(R.id.text1);

        String s= child.getText().toString();
            menu.setHeaderTitle(s);  
            menu.add(0, view.getId(), 0, "Serve");  
            menu.add(0, view.getId(), 0, "View");  

        }  
于 2012-08-29T08:25:51.887 に答える
2

人が長押しした項目の位置にある TextView を探している場合は、次のようにして取得できます。

String s = ((TextView) view.getItemAtPosition(info.position)).getText();
于 2009-11-13T06:44:02.673 に答える
0

あなたの助けに感謝しますが、それでもうまくいかないのではないかと思います。提案した行を追加すると、「getItemAtPosition」に下線が引かれ、次のように表示されます。--メソッドgetItemAtPosition(int)は、タイプViewに対して未定義です--

彼はビューをAdapterViewにキャストすることを提案しているので、次のようになります。

String s = ((TextView) ((AdapterView<ListAdapter>) view).getItemAtPosition(info.position)).getText();

これを実行してアイテムを長押しすると、「ClassCastException」が表示されます

于 2009-11-13T18:37:26.883 に答える
0

このメソッドでは、リスト アイテムに関連するアイテムを取得します。

@Override
public boolean onContextItemSelected(MenuItem aItem) {
  AdapterContextMenuInfo menuInfo = (AdapterContextMenuInfo) aItem.getMenuInfo();
  Object entity =  (Object) todoList.getAdapter().getItem(menuInfo.position);
  switch (aItem.getItemId()) {}
}
于 2011-04-28T06:44:53.177 に答える
0

はい、私もそう思いました。しかし、これを実装すると、リスト内の最初の TextView のテキストを取得するだけです。つまり、目的の TextView のテキストを取得できますが、それは常に最初のリスト エントリのテキストです。longClickedList エントリに対処するオプションはありませんか?

于 2009-11-12T20:26:26.303 に答える
0

使用してHashMap

getListView().setOnItemClickListener(new AdapterView.OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            HashMap m = (HashMap) getListView().getItemAtPosition(position);
            System.out.println("itemClick: position = " + position + ", id = " + id + " o = " + m.get("YOUR_KEY"));
        }
    });
于 2012-08-18T22:17:01.850 に答える
0
list.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> parent, View view,int position, long id) {
            String title = (String) ((TextView)view.findViewById(R.id.title)).getText();
                String  artist=(String)((TextView)view.findViewById(R.id.artist)).getText();

                     //System.out.println(s);
                        Toast.makeText(CustomizedListView.this,"Title = "+title+"\n"+"Artist = "+artist, Toast.LENGTH_SHORT).show();                            

        }
    });     
于 2012-02-21T12:40:18.233 に答える
0

CustomAdapter のデータ ソースとして ArrayLists の ArrayList があったので、

menu.setHeaderTitle(Messages.get(info.position).getUserName());
于 2012-07-13T08:28:53.610 に答える