Android ActionbarSherlock导航抽屉

Android ActionbarSherlock导航抽屉,android,navigation,navigation-drawer,Android,Navigation,Navigation Drawer,我正在尝试将ActionBarSherlock导航抽屉中的文本视图更改为带有提示的编辑文本。 到目前为止,我已经完成了从它创建编辑文本(这是小菜一碟),但我似乎无法找到如何从文本中创建提示,它现在似乎已填充在编辑文本中 我怎样才能改变它? 下面是我的代码。 因为我不知道哪个部分是相关的,所以我发布了很多代码 mFragmentTitles = getResources().getStringArray(R.array.nav_drawer_items); mDrawerLayout =

我正在尝试将ActionBarSherlock导航抽屉中的文本视图更改为带有提示的编辑文本。 到目前为止,我已经完成了从它创建编辑文本(这是小菜一碟),但我似乎无法找到如何从文本中创建提示,它现在似乎已填充在编辑文本中

我怎样才能改变它? 下面是我的代码。 因为我不知道哪个部分是相关的,所以我发布了很多代码

mFragmentTitles = getResources().getStringArray(R.array.nav_drawer_items);
    mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer);
    mDrawerList = (ListView)findViewById(R.id.drawer_list);
    //mDrawerLayout.setDrawerShadow(R.drawable.drawer_shadow, GravityCompat.START);
    mDrawerList.setAdapter(new ArrayAdapter<String>(this, R.layout.drawer_list_item, mFragmentTitles));
    mDrawerList.setOnItemClickListener(new DrawerItemClickListener());

    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    getSupportActionBar().setHomeButtonEnabled(true);

    mDrawerToggle = new ActionBarDrawerToggle(this,
            mDrawerLayout,
            R.drawable.ic_drawer,
            R.string.drawer_open,
            R.string.drawer_close){
        public void onDrawerClosed(View v){
            getSupportActionBar().setTitle(mTitle);
            supportInvalidateOptionsMenu();
        }
        public void onDrawerOpened(View v){
            getSupportActionBar().setTitle(mDrawerTitle);
            supportInvalidateOptionsMenu();
        }
    };
    mDrawerLayout.setDrawerListener(mDrawerToggle);
    if(savedInstanceState == null){
        selectItem(0);
    }
}


@Override
public boolean onCreateOptionsMenu(Menu menu) {
   getSupportMenuInflater().inflate(R.menu.main, menu);
   return true;
}

public boolean onOptionsItemSelected(MenuItem item)
{
    switch (item.getItemId())
    {
    case android.R.id.home:
        if(mDrawerLayout.isDrawerOpen(mDrawerList)){
            mDrawerLayout.closeDrawer(mDrawerList);
        }else {
            mDrawerLayout.openDrawer(mDrawerList);
        }
        return true;
    case R.id.settings:
        if(mDrawerLayout.isDrawerOpen(mDrawerList)){
            mDrawerLayout.closeDrawer(mDrawerList);
        }else {
            mDrawerLayout.openDrawer(mDrawerList);
        }
        return true;
    default:
        return super.onOptionsItemSelected(item);
    }
}
private class DrawerItemClickListener implements ListView.OnItemClickListener{
    @Override
    public void onItemClick(AdapterView<?> parent, View v, int position, long id){
        selectItem(position);
    }
}
private void selectItem(int position){
    Fragment newFragment = new Fragment_1();
    FragmentManager fm = getSupportFragmentManager();
    switch(position){
    case 0:
        newFragment = new Fragment_1();
        break;
    case 1:
        newFragment = new fragment_2();
        break;
    case 2:
        newFragment = new fragment_3();
        break;
    case 3:
        newFragment = new fragment_4();
        break;
    case 4:
        newFragment = new Fragment_1();
        break;
    }
    fm.beginTransaction()
    .replace(R.id.content_frame, newFragment)
    .commit();

    mDrawerList.setItemChecked(position, true);
    setTitle(mFragmentTitles[position]);
    mDrawerLayout.closeDrawer(mDrawerList);
}

@Override
public void setTitle(CharSequence title){
    mTitle = title;
    getSupportActionBar().setTitle(title);
}

@Override
protected void onPostCreate(Bundle savedInstanceState){
    super.onPostCreate(savedInstanceState);
    mDrawerToggle.syncState();
}

@Override
public void onConfigurationChanged(Configuration newConfig){
    super.onConfigurationChanged(newConfig);
    mDrawerToggle.onConfigurationChanged(newConfig);
}

}
MFFragmentTitles=getResources().getStringArray(R.array.nav_drawer_items);
mDrawerLayout=(抽屉布局)findViewById(R.id.drawer);
mDrawerList=(ListView)findViewById(R.id.drawer\u列表);
//mDrawerLayout.setDrawerShadow(R.drawable.drawer\u shadow,GravityCompat.START);
mDrawerList.setAdapter(新的ArrayAdapter(this,R.layout.drawer_list_项,MFFragmentTitles));
setOnItemClickListener(新的DrawerItemClickListener());
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setHomeButtonEnabled(true);
MDRAWERTOGLE=新操作BARDRAWERTOGLE(此,
mDrawerLayout,
R.可抽出式ic_抽屉,
R.string.drawer\u打开,
右弦抽屉(U关闭){
公共空间已关闭(视图五){
getSupportActionBar().setTitle(mTitle);
SupportInvalidateOptions菜单();
}
已打开的公共空间(视图五){
getSupportActionBar().setTitle(mDrawerTitle);
SupportInvalidateOptions菜单();
}
};
mDrawerLayout.setDrawerListener(mDrawerToggle);
如果(savedInstanceState==null){
选择项目(0);
}
}
@凌驾
公共布尔onCreateOptions菜单(菜单){
getSupportMenuInflater().充气(R.menu.main,menu);
返回true;
}
公共布尔值onOptionsItemSelected(菜单项项)
{
开关(item.getItemId())
{
案例android.R.id.home:
if(mDrawerLayout.isDrawerOpen(mDrawerList)){
mDrawerLayout.closeDrawer(mDrawerList);
}否则{
mDrawerLayout.openDrawer(mDrawerList);
}
返回true;
案例R.id设置:
if(mDrawerLayout.isDrawerOpen(mDrawerList)){
mDrawerLayout.closeDrawer(mDrawerList);
}否则{
mDrawerLayout.openDrawer(mDrawerList);
}
返回true;
违约:
返回super.onOptionsItemSelected(项目);
}
}
私有类DrawerItemClickListener实现ListView.OnItemClickListener{
@凌驾
public void onItemClick(AdapterView父视图、视图v、整型位置、长id){
选择项目(位置);
}
}
私有void selectItem(内部位置){
Fragment newFragment=新片段_1();
FragmentManager fm=getSupportFragmentManager();
开关(位置){
案例0:
newFragment=newFragment_1();
打破
案例1:
newFragment=newFragment_2();
打破
案例2:
newFragment=newFragment_3();
打破
案例3:
newFragment=newFragment_4();
打破
案例4:
newFragment=newFragment_1();
打破
}
fm.beginTransaction()
.replace(R.id.content\u frame,newFragment)
.commit();
mDrawerList.setItemChecked(位置,true);
setTitle(MFFragmentTitles[职位]);
mDrawerLayout.closeDrawer(mDrawerList);
}
@凌驾
公共无效设置标题(字符序列标题){
mTitle=标题;
getSupportActionBar().setTitle(标题);
}
@凌驾
后期创建时受保护的空(捆绑包savedInstanceState){
super.onPostCreate(savedInstanceState);
mDrawerToggle.syncState();
}
@凌驾
公共无效OnConfiguration已更改(配置newConfig){
super.onConfigurationChanged(newConfig);
mDrawerToggle.onConfigurationChanged(newConfig);
}
}
在我的Xml中是一个EditText(drawer\u list\u item.Xml)


这是我用来显示抽屉的另一个XML

<android.support.v4.widget.DrawerLayout     xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/drawer" >
<FrameLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/content_frame"/>
<ListView
    android:id="@+id/drawer_list"
    android:layout_width="240dp"
    android:layout_height="match_parent"
    android:divider="#0c7f58"
    android:dividerHeight="1dp"
    android:background="#13ca8c"
    android:choiceMode="singleChoice"
    android:layout_gravity="end"
    android:paddingLeft="16dp"
    android:paddingRight="16dp"
    />

</android.support.v4.widget.DrawerLayout>


默认情况下,
ArrayAdapter
将每个项目的字符串值加载为相应的
TextView
文本。它的
getView()
实现是:

    if (convertView == null) {
        view = mInflater.inflate(resource, parent, false);
    } else {
        view = convertView;
    }

    <irrelevant stuff snipped>

    T item = getItem(position);
    if (item instanceof CharSequence) {
        text.setText((CharSequence)item);
    } else {
        text.setText(item.toString());
    }

这将得到相应的字符串作为提示,而不是文本。

解决此问题的方法是创建一个自定义MenuAdapter并将编辑文本放入其中

mMenuAdapter = new MenuListAdapter(MainFragActivity.this, title);
    mDrawerList.setAdapter(mMenuAdapter);
//在主类中输入上面的代码,然后在自定义类中输入下面的代码



}

请发布设置EditText提示的部分。这正是我的问题,我在哪里可以这样做。但是EditText在哪里?它是否在布局xml文件中?还是通过编程方式(用Java代码)创建它?因为它不是在这些片段中:)请发布那个部分。@ MATASH在中间发布。是的,我知道,但是它不是普通的编辑文本,它在导航抽屉里(如果我再次打开它,字符串数组TEKST显示)我不明白。
EditText
在任何地方都是相同的,即使在导航抽屉中也是如此。我从values/strings.xml中的字符串数组中获取文本,这是通过ArrayAdapter添加到listview的。但是,如果我打开listview,编辑文本将被字符串数组填充为tekst,因此不是我想要的提示。我添加了当前结果的图像,我想要的是提示而不是文本,因此当我按下editText时,文本在我开始键入时消失。这也不起作用,给我一个类强制转换异常,从android.support.v5.widget.Drawerlayout不能强制转换为android.widget.EditText
EditText edit = (EditText)LayoutInflater.from(getContext()).inflate(R.layout.drawer_list_item);
edit.setHint(getItem(position).toString());
mMenuAdapter = new MenuListAdapter(MainFragActivity.this, title);
    mDrawerList.setAdapter(mMenuAdapter);
import com.actionbarsherlock.app.SherlockFragment;
import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;

public class MenuListAdapter extends BaseAdapter {

// Declare variables
Context context;
String[] mTitle;
String[] mSubTitle;
LayoutInflater inflater;

public MenuListAdapter(Context context, String[] title) {
    this.context = context;
    this.mTitle = title;
}

@Override
public int getCount() {
    return mTitle.length;
}

@Override
public Object getItem(int position) {
    return mTitle[position];
}

@Override
public long getItemId(int position) {
    return position;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    // Declare Variables
    EditText txtTitle;
    TextView txtSubTitle;
    ImageView imgIcon;

    inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    View itemView = inflater.inflate(R.layout.drawer_list_item, parent, false);

    // Locate the TextViews
    txtTitle = (EditText)itemView.findViewById(R.id.title);
    // Set the data
    txtTitle.setHint(mTitle[position]);
    txtTitle.setBackground(null);

    return itemView;

}