1

こんにちは、リストビュー行のアクティブ ボタンについてサポートが必要です。次に、テキストビューを変更する行のボタンを押しました。このリスト行は、setOnItemLongClickListener () でアクティブ化する必要があります。誰かが私に例やチュートリアルを見せて、このようなものや例を作ったり、私の問題があることを示したりできますか? 私はグーグルで疲れていて、答えが得られません... 私はアンドロイドが初めてで、私の言語とtnxで申し訳ありません;)私のアイデア。

+-----------------------------------------+
| textview | textview | textview | Button |
+----------+----------+----------+--------+
| textview | textview | textview | Button |
+-----------------------------------------+

次に、ボタンを押したテキストビューは次のように数値になります。

+-----------------------------------------+
| textview | textview | textview | Button |
+----------+----------+----------+--------+
| textview | textview |     1    | Button | <- this button was pressed
+-----------------------------------------+

私はそれをボタンで変更しましたが、問題はそれがより多くの行を変更することです。お気に入り

+-----------------------------------------+
| textview | textview | textview | Button |
+----------+----------+----------+--------+
| textview | textview |     1    | Button | <- this button was pressed
+-----------------------------------------+
| textview | textview | textview | Button |
+----------+----------+----------+--------+
| textview | textview |     1    | Button | <- this button was **not** pressed
+----------+----------+----------+--------+
| textview | textview | textview | Button |
+----------+----------+----------+--------+
| textview | textview |     1    | Button | <- this button was **not** pressed
+-----------------------------------------+

リストを取得するためにSimpleAdapterを使用しています。

ListView lv = getListView();   
lv.setOnItemLongClickListener(listener);

OnItemLongClickListener listener = new OnItemLongClickListener() {
    public boolean onItemLongClick(AdapterView<?> parent, final View view, int position, long id) {
        btn1 = (Button) view.findViewById(R.id.button1);
        btn1.setOnClickListener(new OnClickListener(){
            int number= 0;
            public void onClick(View v) {
                // TODO Auto-generated method stub
                TextView textView = (TextView) v.findViewById(R.id.textView_must_be_changed);
                number++;
                textView.setText(String.valueOf(number)); 
            }                   
        });
    }
};

私のレイアウトXMLは

  <GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
      android:layout_width="fill_parent"
      android:id="@+id/gridas"
      android:layout_height="fill_parent"
      android:choiceMode="multipleChoice"
      android:columnCount="10"
      android:descendantFocusability="beforeDescendants" >


      <TextView
          android:id="@+id/Textview"
          android:layout_column="5"
          android:layout_columnSpan="3"
          android:layout_gravity="left|bottom"
          android:layout_row="1"
          android:layout_rowSpan="2"
          android:text="4.3 kg" />

      <TextView
          android:id="@+id/Textview"
          android:layout_column="7"
          android:layout_gravity="left"
          android:layout_row="1"
          android:layout_rowSpan="2"
          android:text="35 cm" />



      <TextView
          android:id="@+id/Textview"
          android:layout_width="163dp"
          android:layout_height="49dp"
          android:layout_column="9"
          android:layout_gravity="left"
          android:layout_row="2"
          android:gravity="left"
          android:text="949.00 Lt"
          android:textSize="32sp"
          android:textStyle="bold" />



      <TextView
          android:id="@+id/**textView_must_be_changed**"
          android:layout_column="9"
          android:layout_gravity="left|top"
          android:layout_row="1"
          android:text="tekstukas"
           />

      <Button
          android:id="@+id/button1"
          android:layout_column="9"
          android:layout_gravity="left|top"
          android:layout_row="3"
          android:text="Button" 
          android:focusable="false"
          android:focusableInTouchMode="false"/>

  </GridLayout>    
4

3 に答える 3

3

リスト ビュー用のカスタム アダプターを作成する必要があります。そして、このアダプターの getView() メソッドで、ボタンのクリックリスナーを設定する必要があります。行ボタンを押すと、このリスナーが呼び出されます。このリスナーでは、変更する行データを取得する必要があります。うーん..リスナーのonClickのパラメーターにあるビューのタグから取得する必要があると思います。また、このタグを設定する必要があります。次の例では、その方法を示します..

@Override
    public View getView( int position, View convertView, ViewGroup parent ){
        PhoneContactListItem item = getItem( position );
        TextView contactName;
        TextView contactPhone;
        CheckBox isCheckedCheckBox;

        if( convertView == null ) {
            convertView = LayoutInflater.from( context).inflate( R.layout.project_contact_list_item_layout, null );
            contactName = (TextView) convertView.findViewById( R.id.projectContactRow_contactName );
            contactPhone = (TextView) convertView.findViewById( R.id.projectContactRow_contactPhone );
            isCheckedCheckBox = (CheckBox) convertView.findViewById( R.id.projectContactRow_checkBox );

            convertView.setTag( new ViewHolder( contactName, contactPhone, isCheckedCheckBox ) );

            //setting on click listener for isCheckedCheckBox
            isCheckedCheckBox.setOnClickListener( new OnClickListener() {
                public void onClick(View v) {
                    CheckBox cb = (CheckBox)v;
                    PhoneContactListItem i = (PhoneContactListItem)cb.getTag();
                    i.toggleChecked();
                    cb.setChecked( i.isChecked() );
                }               
            });
        } else {
            ViewHolder vh = (ViewHolder)convertView.getTag();
            contactName = vh.getContactName();
            contactPhone = vh.getContactPhone();
            isCheckedCheckBox = vh.getIsCheckedCheckBox();
        }

        //initializing views
        isCheckedCheckBox.setTag( item );
        contactName.setText( item.getPhoneContact().getContactName() );
        contactPhone.setText( item.getPhoneContact().getContactPhone() );

        //initializing checkbox
        if( item.isChecked() )
            isCheckedCheckBox.setChecked( true );
        else 
            isCheckedCheckBox.setChecked( false );

        //enabling or disabling check box
        if( item.isCheckDisabled() ) 
            isCheckedCheckBox.setClickable( false );
        else 
            isCheckedCheckBox.setClickable( true );

        //showing checkboxes
        if( showCheckBoxes ) 
            isCheckedCheckBox.setVisibility( View.VISIBLE );
        else 
            isCheckedCheckBox.setVisibility( View.GONE );

        return convertView;
    }

    private class ViewHolder {
        private TextView contactName;
        private TextView contactPhone;
        private CheckBox isCheckedCheckBox;

        public ViewHolder( TextView contactName, TextView contactPhone, CheckBox isCheckedCheckBox ) {
            this.contactName = contactName;
            this.contactPhone = contactPhone;
            this.isCheckedCheckBox = isCheckedCheckBox;
        }

        /*
         * getters
         */
        public TextView getContactName() {
            return contactName;
        }
        public TextView getContactPhone() {
            return contactPhone;
        }
        public CheckBox getIsCheckedCheckBox() {
            return isCheckedCheckBox;
        }
    }

それはあなたの状況ではありませんが、同じ..

于 2013-02-20T10:44:26.017 に答える
1

longclick リスナー内で onclick リスナーを設定している理由がよくわかりません。

あなたがしなければならないことは、カスタムアダプターを作成し、カスタムアダプター内で getView メソッドをオーバーライドし、

テキストビュー テキストビュー テキストビュー ボタン

次に、ボタンとテキストビューへの参照を取得します

buttonView = inflatedView.findViewById(R.id.button);
textView = inflatedView.findViewById(R.id.textView)

そして、この textView 参照のテキストを編集するこのボタン参照に onClicklistener をバインドします。

于 2013-02-20T10:03:20.323 に答える
0

ListView最適化として行を再利用します。そのため、ボタンをクリックすると、テキストが変更された複数の行が表示されます。

テキストがレイアウト内のものと同じであっても、すべてのtextView行に値を設定する必要があります。

于 2013-02-20T09:57:51.063 に答える