0

actionbarsherlock oncreate を取得してデフォルト値を設定するクラスがあります。この値を別のクラスから変更するにはどうすればよいですか?

動作しないサンプル コード:

public class MyActivity extends SlidingFragmentActivity {
 public static String abs;

@Override
    protected void onCreate(final Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);        
       setContentView(R.layout.activity_main);

       abs = "text";
       getSupportActionBar().setTitle(abs);
}
}

外部クラス:

MyActivity.abs = "new value";
4

2 に答える 2

2

タイトルを設定するのは絶対に推奨される方法ではありませんが、割り当てを削除するとうまくいくはずabs = "text";です...

public class MyActivity extends SlidingFragmentActivity {
    public static String abs;

    @Override
    protected void onCreate(final Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);        
       setContentView(R.layout.activity_main);

       getSupportActionBar().setTitle(abs);
    }
}

...そして、アクティビティが最初に作成される前MyActivity.abs = "new value";にいくつかの場所を呼び出します。

とにかく、タイトルを追加としてアクティビティに渡すことを提案します...

Intent intent = new Intent(context, MyActivity.class);
intent.putExtra("title", "Another Headline");
context.startActivity(intent);

...そして意図からそれを評価します:

public class MyActivity extends SlidingFragmentActivity {

    @Override
    protected void onCreate(final Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);        
        setContentView(R.layout.activity_main);

        Bundle extras = getIntent().getExtras();
        String title = "Default Headline";
        if (extras != null && extras.containsKey("title")) {    
            title = intent.getStringExtra("title");   
        }

        getSupportActionBar().setTitle(title);
    }
}

作成後のps設定タイトル:

たとえば、フラグメント内にいるためにアクティビティを直接参照できる場合は、次のようなメソッドを追加できます...

public class MyActivity extends SlidingFragmentActivity {

    public void setTitle(String title) {
        this.getSupportActionBar().setTitle(title);
    }

    ....
}

...そしてそれに応じて呼び出します:

getActivity().setTitle("Another Headline");

任意の種類の引数を既存のアクティビティに渡して、任意の方法で処理できるようにする最も洗練された方法は、BroadcastReceiver を使用することです。

public abstract class MyActivity extends SlidingFragmentActivity {

    public static final String SET_TITLE_ACTION = "com.myapp.SET_TITLE_ACTION";
    public static final IntentFilter INTENT_FILTER = createIntentFilter();

    private SetTitleReceiver setTitleReceiver = new SetTitleReceiver();

    private static IntentFilter createIntentFilter() {
        IntentFilter filter = new IntentFilter();
        filter.addAction(SET_TITLE_ACTION);
        return filter;
    }

    protected void registerSetTitleReceiver() {
        registerReceiver(setTitleReceiver, INTENT_FILTER);
    }

    protected void unRegisterSetTitleReceiver() {
        unregisterReceiver(setTitleReceiver);
    }

    public class SetTitleReceiver extends BroadcastReceiver {

        @Override
        public void onReceive(Context context, Intent intent) {
            if (intent.getAction().equals(SET_TITLE_ACTION)) {
                Bundle extras = intent.getExtras();
                if (extras != null && extras.containsKey("title")) {    
                    title = intent.getStringExtra("title");   
                    this.getSupportActionBar().setTitle(title);
                }
            }
        }
    }
}

タイトルActivityの変更を受け取ることができるクラスは、 に登録し、BroadcasdtReceiveronResume()登録解除する必要がありonPause()ます。このようにして、どこからでもブロードキャスト イベントを送信して、これらのアクティビティ インスタンスのタイトルを設定できます。

Intent intent = new Intent(MyActivity.SET_TITLE_ACTION);
intent.putExtra("title", "Another Headline");
context.sendBroadcast(intent);

これが役に立てば幸いです...乾杯!

于 2013-04-13T08:45:22.857 に答える
1

abs参照を変更するだけで指しているため、機能しません。タイトルを変更したい場合は、SherlockActivity をパラメーターとしてメソッドに渡します。

例:

public class MyActivity extends SherlockActivity {

@Override
    protected void onCreate(final Bundle savedInstanceState) {
        new ChangeTitle(this).setTitle("test title");
    }
}

class ChangeTitle {
    String title;
    SherlockActivity activity;

    public ChangeTitle(SherlockActivity activity) {
        this.activity = activity;
    }

    public void setTitle(String title) {
        this.title = title;
        activity.getSupportActionBar().setTitle(this.title);
    }
}
于 2013-04-13T08:33:55.037 に答える