gpt4 book ai didi

android - 如何从简单的 java 类调用 getSupportActionBar()

转载 作者:太空狗 更新时间:2023-10-29 13:18:16 26 4
gpt4 key购买 nike

我必须在后续类中添加更多代码,但我需要将 handleMenuSearch() 分离到另一个类中以组织我的代码。我无法在分离的类中调用 getSupportActionBar()。我如何在另一个类中获得支持 ActionBar?

NewsakHome.java

package com.newsak;

import android.content.Context;
import android.os.Build;
import android.os.Bundle;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.inputmethod.EditorInfo;
import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

/**
* Created by Bassem on 8/26/2015.
*/
public class NewsakHome extends AppCompatActivity {
private Toolbar toolBar;
private MenuItem searchItem;
private EditText searchText;
private boolean isSearchOpened = false;

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.newsak_welcome);
toolBar = (Toolbar) findViewById(R.id.tool_bar_newsak);


// toolBar.setLogo(R.drawable.ic_launcher);
setSupportActionBar(toolBar);


}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main, menu);
return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId())
{
case R.id.search_bar_id:
handleMenuSearch();
return true;
}
return super.onOptionsItemSelected(item);
}

@Override
public boolean onPrepareOptionsMenu(Menu menu) {
searchItem = menu.findItem(R.id.search_bar_id);
return super.onPrepareOptionsMenu(menu);
}
protected void handleMenuSearch(){
ActionBar actionBar = getSupportActionBar();
InputMethodManager inputManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
if(isSearchOpened) // is cloases
{
actionBar.setDisplayShowTitleEnabled(true);
actionBar.setDisplayShowCustomEnabled(false);

// hide the Keyboard

inputManager.hideSoftInputFromWindow(searchText.getWindowToken() ,0);

//set the closed Icon
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
{
searchItem.setIcon(ContextCompat.getDrawable(this, R.drawable.search_icon_open));
} else
{
searchItem.setIcon(getResources().getDrawable(R.drawable.search_icon_open));
}
isSearchOpened = false;
}
else
{
actionBar.setDisplayShowTitleEnabled(false);
actionBar.setCustomView(R.layout.search_bar);
actionBar.setDisplayShowCustomEnabled(true); // set our search layout

searchText = (EditText) actionBar.getCustomView().findViewById(R.id.search_text_id);
searchText.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView view, int actionId, KeyEvent event) {

if (actionId == EditorInfo.IME_ACTION_SEARCH) {
doSearch(view.getText().toString());
return true;
}
return false;
}
});
searchText.requestFocus();

//open Keyboard
inputManager.showSoftInput(searchText, InputMethodManager.SHOW_IMPLICIT);

//set close icon
//set the closed Icon
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
{
searchItem.setIcon(ContextCompat.getDrawable(this, R.drawable.search_icon_closed));
} else
{
searchItem.setIcon(getResources().getDrawable(R.drawable.search_icon_closed));
}
isSearchOpened = true;
}
}
//You’d add this method too, to close the search entry with the backbutton:
public void onBackPressed() {
if(isSearchOpened)
{
handleMenuSearch();
return;
}
super.onBackPressed();
}
private void doSearch(String value) {
Toast.makeText(this, "your value is :"+value, Toast.LENGTH_LONG).show();
}
}

最佳答案

您可以将 NewsakHome 的引用传递到您的菜单函数中,如下所示:

// MenuSearchClass.java
public class MenuSearchClass() {
public static void handleMenuSearch(NewsakHome context) {
// use 'context' whenever you want to access one of NewsakHome's methods/members
ActionBar actionBar = context.getSupportActionBar();
InputMethodManager inputManager = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);

...
}
}

然后,将 this 传递到 handleMenuSearch() 中:

// NewsakHome.java
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId())
{
case R.id.search_bar_id:
// 'this' will become 'context' in handleMenuSearch()
// handleMenuSearch() is static to make the example easier to read
MenuSearchClass.handleMenuSearch(this);
return true;
}
return super.onOptionsItemSelected(item);
}

不过我同意@Peter Brittain 的观点。您不应该仅仅为了使其更小或更具可读性而拆分一个类。 Activity 类通常处理很多功能,因此它们在您的项目中成为一些更大、更复杂的类是有道理的。

关于android - 如何从简单的 java 类调用 getSupportActionBar(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32258921/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com