【问题标题】:Android: Adding an icon beside the text in Navigation DrawerAndroid:在导航抽屉中的文本旁边添加一个图标
【发布时间】:2015-10-03 19:42:38
【问题描述】:

我已经创建了一个显示导航抽屉的活动,我想在文本视图旁边添加一个图标。但是当我运行时,图标仍然没有出现。我会发布我的代码,请帮助我解决错误。提前致谢。

字符串

<string-array name="nav_drawer_labels">
    <item>@string/nav_item_doctor</item>
    <item>@string/nav_item_hospital</item>
    <item>@string/nav_item_pharmacy</item>
    <item>@string/nav_item_clinic</item>
</string-array>

<string name="title_pharmacy">Pharmacy</string>
<string name="title_hospital">Hospital</string>
<string name="title_doctor">Doctor</string>
<string name ="title_clinic">Specialty Clinic</string>

<array name="nav_drawer_icons">
    <item>@drawable/ic_doctor</item>
    <item>@drawable/ic_hospital</item>
    <item>@drawable/ic_pharmacy</item>
    <item>@drawable/ic_clinic</item>
</array>

主要活动

public class MainActivity extends AppCompatActivity implements FragmentDrawer.FragmentDrawerListener {

private static String TAG = MainActivity.class.getSimpleName();

private Toolbar mToolbar;
private FragmentDrawer drawerFragment;

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

    mToolbar = (Toolbar) findViewById(R.id.toolbar);

    setSupportActionBar(mToolbar);
    getSupportActionBar().setDisplayShowHomeEnabled(true);

    drawerFragment = (FragmentDrawer)
            getSupportFragmentManager().findFragmentById(R.id.fragment_navigation_drawer);
    drawerFragment.setUp(R.id.fragment_navigation_drawer, (DrawerLayout) findViewById(R.id.drawer_layout), mToolbar);
    drawerFragment.setDrawerListener(this);

    // display the first navigation drawer view on app launch
    displayView(0);
}


@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.menu_main, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();

    //noinspection SimplifiableIfStatement
    if (id == R.id.action_settings) {
        return true;
    }

    return super.onOptionsItemSelected(item);
}

@Override
public void onDrawerItemSelected(View view, int position) {
    displayView(position);
}

private void displayView(int position) {
    Fragment fragment = null;
    String title = getString(R.string.app_name);
    switch (position) {
        case 0:
            fragment = new FragmentDoctor();
            title = getString(R.string.title_doctor);
            break;
        case 1:
            fragment = new FragmentHospital();
            title = getString(R.string.title_hospital);
            break;
        case 2:
            fragment = new FragmentPharmacy();
            title = getString(R.string.title_pharmacy);
            break;
        default:
            break;
    }

    if (fragment != null) {
        FragmentManager fragmentManager = getSupportFragmentManager();
        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
        fragmentTransaction.replace(R.id.container_body, fragment);
        fragmentTransaction.commit();

        // set the toolbar title
        getSupportActionBar().setTitle(title);
    }
}

导航抽屉适配器

public class NavigationDrawerAdapter extends RecyclerView.Adapter<NavigationDrawerAdapter.MyViewHolder> {
List<NavDrawerItem> data = Collections.emptyList();
private LayoutInflater inflater;
private Context context;

public NavigationDrawerAdapter(Context context, List<NavDrawerItem> data) {
    this.context = context;
    inflater = LayoutInflater.from(context);
    this.data = data;
}

public void delete(int position) {
    data.remove(position);
    notifyItemRemoved(position);
}

@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View view = inflater.inflate(R.layout.nav_drawer_row, parent, false);
    MyViewHolder holder = new MyViewHolder(view);
    return holder;
}

@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
    NavDrawerItem current = data.get(position);
    holder.title.setText(current.getTitle());
    holder.icon.setImageResource(current.getIcon());
}

@Override
public int getItemCount() {
    return data.size();
}

class MyViewHolder extends RecyclerView.ViewHolder {
    TextView title;
    ImageView icon;

    public MyViewHolder(View itemView) {
        super(itemView);
        title = (TextView) itemView.findViewById(R.id.title);
        icon = (ImageView) itemView.findViewById(R.id.imageView);
    }
}

NAVDRAWERITEM

public class NavDrawerItem {
private String title;
private int icon;


public NavDrawerItem() {

}

public NavDrawerItem( String title, int icon) {
    this.title = title;
    this.icon = icon;
}
public String getTitle() {
    return title;
}

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

public int getIcon(){return  icon;}

public void setIcon(int icon){
    this.icon = icon;
}

【问题讨论】:

  • 您的文本是否在导航抽屉中可见?

标签: android android-studio android-recyclerview navigation-drawer


【解决方案1】:

在您的 MainActivity 上声明:

getSupportActionBar().setDisplayShowHomeEnabled(true);

还有:

getSupportActionBar().setIcon(R.drawable.ic_launcher);

【讨论】:

  • 我认为他是在询问导航抽屉中文本旁边显示的图标。
  • 我没有看到图标资源是在哪里声明的。
  • 那是因为他不是。
  • 是的,你是对的@phxhawke。我是编程新手,我不知道我的代码中缺少什么,所以我需要你们的帮助
  • 查看我的答案并尝试一下。
【解决方案2】:

在您发布的代码中,您实际上从未加载图标资源。此外,您在资源中创建了从未加载过的数组。您是否打算使用它们来创建 NavDrawerItem 对象?

【讨论】:

  • 是的,我想在字符串标题旁边显示图标
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多