2

ユーザーをロードするアダプターと、招待状を送信するための 1 つのボタン/テキストファイルがあります。アダプターでこれを行います:

    @Override
public View getView(int position, View convertView, ViewGroup parent) {                 
    UserAgenda ua = getItem(position);  

    ViewHolder holder;      
    if (convertView == null) {          
        //...         
        convertView.setTag(holder);            
    } else {
        holder = (ViewHolder) convertView.getTag();
    }           

        if(ua.getInvited() != null){
            if(ua.getInvited().equals("true")){
                addTextViewInvited(convertView);//add a textview as the user is invited
            }
            else if(ua.getInvited().equals("false")){
                addButton2Invite(convertView,ua);//add the button to invite
            }
        }       
    return convertView;
}

addButton2Invite のメソッドで、招待を次のように送信します。

   private void addButton2Invite(final View convertView, UserAgenda ua) {       

    bt2Invited.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(final View v) {

            final Button bt2Invited = (Button) convertView.findViewById(R.id.bt2invite);
            final ProgressBar pbar = (ProgressBar) convertView.findViewById(R.id.progress);
            new Thread(){
                @Override
                public void run() { 
                    if(networkWork())
                       ua.setInvited("true"); //Error, NOT PERMITED! ua need to be final.
                };
            }.start();
        }
    });     
}

networkWork が OK のときに を設定したいのですua.setInvited("true");が、ua を として宣言しないと許可されませんfinal。しかし、その後、その値を変更することはできず、次にアダプターが getView に入ると、ua.getInvited() = "false". テキストビューを上下にスクロールすると、行にボタンが表示されます。

内のオブジェクト UserAgenda ua の値を変更するアイデアはありますonClicklistenerか?

ありがとう!

4

2 に答える 2

5

ua.setInvited(true);にある場合、uafinalを宣言します。uaの参照ではなく、uaによって参照されるオブジェクトの値を変更しているため、ua finalを設定しても、setInvited(true)には影響しません。

それ以外の場合は、クリックリスナーをアクティビティクラスに実装して使用する必要があります。

public MyActivity extends Activity implements OnClickListener

と使用

myView.setOnClickListener(this);

との方法を実装する

public void onClick(View v)
 {
    switch (v.getId()) 
       {
         case R.id.myView:
          //functionality for on click
         break;
        }
  }
于 2011-10-21T13:11:48.583 に答える
3

Java では、キーワードfinalが参照型の変数に適用された場合、その参照は変更できないことを意味し、基になるオブジェクトを変更できないことを意味します(後者は不変性と呼ばれます)。

たとえば、メソッドでuafinal として宣言されている場合、次のことができることを意味します。

ua.some_pub_non_final_field = "some_value";
ua.somePublicMethod();

だがしかし

ua = new UA();
于 2011-10-21T13:16:40.713 に答える