Listview 删除项目并获取它';设置TOAST消息的标题或更改项目自定义适配器的名称

Listview 删除项目并获取它';设置TOAST消息的标题或更改项目自定义适配器的名称,listview,delete-row,custom-adapter,Listview,Delete Row,Custom Adapter,我有一个自定义适配器,我从互联网上得到的。 里面有食谱,每个食谱都有图片和标题。 我在谷歌和这个网站上到处寻找我的具体案例,但没有找到我真正需要的。 我发现的信息对我来说太复杂了,无法适应我自己的案例问题 实际上,对于初学者以上的人来说,这应该是一个简单的任务,但不幸的是,我是一个初学者 我需要有从列表中删除项目的选项 我需要一个toast消息来显示删除后的名称 我需要能够更改项目的标题 当它是一个ArrayAdapter时,这很容易,因为适配器中没有image变量,但现在查找标题、更改名称

我有一个自定义适配器,我从互联网上得到的。 里面有食谱,每个食谱都有图片和标题。 我在谷歌和这个网站上到处寻找我的具体案例,但没有找到我真正需要的。 我发现的信息对我来说太复杂了,无法适应我自己的案例问题

实际上,对于初学者以上的人来说,这应该是一个简单的任务,但不幸的是,我是一个初学者

  • 我需要有从列表中删除项目的选项
  • 我需要一个toast消息来显示删除后的名称
  • 我需要能够更改项目的标题
当它是一个ArrayAdapter时,这很容易,因为适配器中没有image变量,但现在查找标题、更改名称和删除项的所有函数都不同了

public class MainActivity extends Activity {

private ListView listView1;
public String mName;
View btnAdd;
String mTitle;
Cursor mCursor;

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

    btnAdd = this.findViewById(R.id.btnAdd);

    Recipe recipe_data[] = new Recipe[]

    {
        new Recipe(R.drawable.cherry_pie, "Cherry Pie"),
        new Recipe(R.drawable.chocchip_cookie, "Cocolate Chips Cookies"),
        new Recipe(R.drawable.quaker_cookie, "Quaker Cookies"),
        new Recipe(R.drawable.short_pastry, "Short Pastry"),
        new Recipe(R.drawable.flour, "Will be added in the future...")
    };


    RecipeAdapter adapter = new RecipeAdapter(this, 
            R.layout.listview_item_row, recipe_data);

    listView1 = (ListView)findViewById(R.id.listView1); 
    View header = (View)getLayoutInflater().inflate(R.layout.listview_header_row, null);
    listView1.addHeaderView(header);

    listView1.setAdapter(adapter);

    OnClickListener listen = new OnClickListener() {
        @Override
        public void onClick(View v) {
                    EditText edit = (EditText) findViewById(R.id.txtItem);

        //we get the text into a global string
        mName = ((TextView)edit).getText().toString();

        //we reverse the edit var back to be empty
        edit.setText("");

        //this.notifyDataSetChanged();
        }
    };

btnAdd.setOnClickListener(listen);  
registerForContextMenu(listView1);
 }

@Override  
    public void onCreateContextMenu(ContextMenu menu, View v,ContextMenuInfo menuInfo) {  
    super.onCreateContextMenu(menu, v, menuInfo);
    menu.setHeaderTitle("Context Menu");  
    menu.add(0, v.getId(), 0, "Change Name");  
    menu.add(0, v.getId(), 0, "Delete");  
 } 


@Override  
    public boolean onContextItemSelected(MenuItem item) {
    AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();

    if(item.getTitle()=="Change Name"){changeN(item.getItemId());}

    else if(item.getTitle()=="Delete"){

        Toast.makeText(this, "Item " + mTitle + " has been removed..",                          Toast.LENGTH_SHORT).show();

        } 

    else {return false;}  
return true;  
} 

//Change item name function
public void changeN(int id){  

}
} 



public class RecipeAdapter extends ArrayAdapter<Recipe>{

Context context; 
int layoutResourceId; 

Recipe data[] = null;

public RecipeAdapter(Context context, int layoutResourceId, Recipe[] data) {
    super(context, layoutResourceId, data);
    this.layoutResourceId = layoutResourceId;
    this.context = context;
    this.data = data;
}


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

    RecipeHolder holder = null;

    if(row == null)
    {
        LayoutInflater inflater = ((Activity)context).getLayoutInflater();

        row = inflater.inflate(layoutResourceId, parent, false);

        holder = new RecipeHolder();

        holder.imgIcon = (ImageView)row.findViewById(R.id.imgIcon);


        holder.txtTitle = (TextView)row.findViewById(R.id.txtTitle);

        row.setTag(holder);
    }
    else
    {
        holder = (RecipeHolder)row.getTag();
    }

    Recipe recipe = data[position];
    holder.txtTitle.setText(recipe.title);
    holder.imgIcon.setImageResource(recipe.icon);

    return row;
}

static class RecipeHolder
{
    ImageView imgIcon;
    TextView txtTitle;
}
}



public class Recipe {
public int icon;
public String title;

public Recipe(){
    super();
}

public Recipe(int icon, String title) {
    super();
    this.icon = icon;
    this.title = title;
}

@Override
public String toString() {
    return this.title;
}
}
公共类MainActivity扩展活动{
私有列表视图列表视图1;
公共字符串mName;
查看btnAdd;
字符串mTitle;
光标mCursor;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnAdd=this.findviewbyd(R.id.btnAdd);
配方数据[]=新配方[]
{
新配方(R.drawable.cherry_派,“樱桃派”),
新配方(R.drawable.chocchip_cookie,“可可片饼干”),
新配方(R.drawable.桂格饼干,“桂格饼干”),
新配方(R.drawable.short_糕点,“short糕点”),
新配方(R.drawable.面粉,“将在未来添加…”)
};
RecipeAdapter适配器=新RecipeAdapter(此,
R.layout.listview(项目行、配方数据);
listView1=(ListView)findViewById(R.id.listView1);
视图标题=(视图)GetLayoutFlater()。充气(R.layout.listview\u header\u行,空);
listView1.addHeaderView(标题);
listView1.setAdapter(适配器);
OnClickListener Listener=新建OnClickListener(){
@凌驾
公共void onClick(视图v){
EditText edit=(EditText)findViewById(R.id.txtItem);
//我们将文本转换成一个全局字符串
mName=((文本视图)编辑).getText().toString();
//我们将编辑变量反转为空
edit.setText(“”);
//this.notifyDataSetChanged();
}
};
btnAdd.setOnClickListener(listen);
registerForContextMenu(listView1);
}
@凌驾
public void onCreateContextMenu(ContextMenu菜单,视图v,ContextMenuInfo菜单信息){
super.onCreateContextMenu(menu,v,menuInfo);
menu.setHeaderTitle(“上下文菜单”);
添加(0,v.getId(),0,“更改名称”);
添加(0,v.getId(),0,“删除”);
} 
@凌驾
公共布尔值onContextItemSelected(MenuItem项){
AdapterContextMenuInfo信息=(AdapterContextMenuInfo)项。getMenuInfo();
如果(item.getTitle()=“更改名称”){changeN(item.getItemId());}
else if(item.getTitle()=“删除”){
Toast.makeText(此“项”+mTitle+”已被删除…),Toast.LENGTH\u SHORT.show();
} 
else{return false;}
返回true;
} 
//更改项目名称功能
公共无效更改(整数id){
}
} 
公共类RecipeAdapter扩展了ArrayAdapter{
语境;
国际布局资源;
配方数据[]=null;
公共RecipeAdapter(上下文上下文、内部布局资源ID、配方[]数据){
超级(上下文、布局资源ID、数据);
this.layoutResourceId=layoutResourceId;
this.context=上下文;
这个数据=数据;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
视图行=转换视图;
RecipeHolder holder=null;
if(行==null)
{
LayoutInflater充气器=((活动)上下文)。getLayoutInflater();
行=充气机。充气(layoutResourceId,父级,false);
支架=新的往复式支架();
holder.imgIcon=(ImageView)row.findViewById(R.id.imgIcon);
holder.txtTitle=(TextView)row.findViewById(R.id.txtTitle);
row.setTag(支架);
}
其他的
{
holder=(RecipeHolder)row.getTag();
}
配方=数据[位置];
holder.txtTitle.setText(recipe.title);
holder.imgIcon.setImageResource(recipe.icon);
返回行;
}
静态类RecipeHolder
{
ImageView imgIcon;
TextView-txtTitle;
}
}
公共课食谱{
公共int图标;
公共字符串标题;
公共配方(){
超级();
}
公共配方(整数图标、字符串标题){
超级();
this.icon=图标;
this.title=标题;
}
@凌驾
公共字符串toString(){
返回此.title;
}
}
回答自己的问题。。 需要添加此行:mTitle=mArrayAdapter.getItem(pos).name; (祝酒词前)