Android 如何在自定义列表适配器中获取位置id?

Android 如何在自定义列表适配器中获取位置id?,android,listview,Android,Listview,我试着列清单。在此列表中,每行将有3种状态: 1) 使用文本和按钮“获取”启动状态 2) 使用进度条和“取消”按钮上载状态 3) 具有文本和按钮上传的就绪状态 import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import and

我试着列清单。在此列表中,每行将有3种状态:

1) 使用文本和按钮“获取”启动状态

2) 使用进度条和“取消”按钮上载状态

3) 具有文本和按钮上传的就绪状态

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ListAdapter;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;

import java.lang.reflect.Array;
import java.util.ArrayList;

public class MyCustomAdapter extends BaseAdapter implements ListAdapter {
    private ArrayList<String> list = new ArrayList<String>();
   // private ArrayList<String> list2 = new ArrayList<String>();
    private Context context;
    private int[] laytypes;
    //private String[] list;


    public MyCustomAdapter(ArrayList<String> list,int[] laytypes,Context context) {
        this.list = list;
        //this.list2 = list2;
        this.context = context;
        this.laytypes=laytypes;
    }

    @Override
    public int getCount() {
        return list.size();
    }

    @Override
    public Object getItem(int position) {
        return list.get(position);
    }

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

    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        View view = convertView;
        if (view == null) {


            LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            view = inflater.inflate(R.layout.list_item_firmware, null);

            TextView listItemText = (TextView)view.findViewById(R.id.list_item_st1);

            listItemText.setText(list.get(position));

/*
            if(laytypes[position]==1)
            {
                LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                view = inflater.inflate(R.layout.list_item_st1, null);


                ProgressBar DownloadBar;
                DownloadBar = (ProgressBar)view.findViewById(R.id.downloadProgressBar);
                DownloadBar.setProgress(50 + laytypes[position]);
                DownloadBar.setMax(100);

            }
            else if(laytypes[position]==2)
            {
                LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                view = inflater.inflate(R.layout.list_item_st2, null);

                TextView listItemText = (TextView)view.findViewById(R.id.list_item_string);

                listItemText.setText(list.get(position));

            }
            else
            {
                LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                view = inflater.inflate(R.layout.list_item_st3, null);

                TextView listItemText = (TextView)view.findViewById(R.id.list_item_string);

                listItemText.setText(list.get(position));
            }
*/

        }







        //Handle buttons and add onClickListeners
        Button deleteBtn = (Button)view.findViewById(R.id.delete_btn);
        deleteBtn.setTag(position);
        Button addBtn = (Button)view.findViewById(R.id.add_btn);
        addBtn.setTag(position);

        deleteBtn.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v) {
                //do something

                list.remove(position); //or some other task
                notifyDataSetChanged();
            }
        });
        addBtn.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v) {
                //do something
                laytypes[position]=1;
                //list2.remove(position);
                notifyDataSetChanged();
            }
        });

        return view;
    }
}
导入android.content.Context;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.BaseAdapter;
导入android.widget.Button;
导入android.widget.ListAdapter;
导入android.widget.ProgressBar;
导入android.widget.TextView;
导入android.widget.Toast;
导入java.lang.reflect.Array;
导入java.util.ArrayList;
公共类MyCustomAdapter扩展BaseAdapter实现ListAdapter{
private ArrayList list=new ArrayList();
//private ArrayList list2=新的ArrayList();
私人语境;
私有int[]类型;
//私有字符串[]列表;
公共MyCustomAdapter(ArrayList列表,int[]laytypes,上下文){
this.list=列表;
//this.list2=list2;
this.context=上下文;
这个.laytypes=laytypes;
}
@凌驾
public int getCount(){
返回list.size();
}
@凌驾
公共对象getItem(int位置){
返回列表。获取(位置);
}
@凌驾
公共长getItemId(int位置){
返回位置;
}
@凌驾
公共视图getView(最终整数位置、视图转换视图、视图组父视图){
视图=转换视图;
如果(视图==null){
LayoutFlater充气器=(LayoutFlater)context.getSystemService(context.LAYOUT\u充气器\u服务);
视图=充气机。充气(R.layout.list\u item\u固件,空);
TextView listItemText=(TextView)view.findViewById(R.id.list\u item\u st1);
listItemText.setText(list.get(position));
/*
if(铺层类型[位置]==1)
{
LayoutFlater充气器=(LayoutFlater)context.getSystemService(context.LAYOUT\u充气器\u服务);
视图=充气机。充气(R.layout.list\u item\u st1,空);
ProgressBar下载栏;
DownloadBar=(ProgressBar)view.findviewbyd(R.id.downloadProgressBar);
DownloadBar.setProgress(50+播放类型[位置]);
下载条设置最大值(100);
}
else if(铺层类型[位置]==2)
{
LayoutFlater充气器=(LayoutFlater)context.getSystemService(context.LAYOUT\u充气器\u服务);
视图=充气机。充气(R.layout.list\u item\u st2,空);
TextView listItemText=(TextView)view.findViewById(R.id.list\u item\u string);
listItemText.setText(list.get(position));
}
其他的
{
LayoutFlater充气器=(LayoutFlater)context.getSystemService(context.LAYOUT\u充气器\u服务);
视图=充气机。充气(R.layout.list\u item\u st3,空);
TextView listItemText=(TextView)view.findViewById(R.id.list\u item\u string);
listItemText.setText(list.get(position));
}
*/
}
//处理按钮并添加onClickListeners
Button deleteBtn=(Button)view.findviewbyd(R.id.delete_btn);
删除BTN.setTag(位置);
Button addBtn=(Button)view.findviewbyd(R.id.add\u btn);
addBtn.setTag(位置);
deleteBtn.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
//做点什么
list.remove(position);//或其他任务
notifyDataSetChanged();
}
});
addBtn.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
//做点什么
铺层类型[位置]=1;
//清单2.移除(位置);
notifyDataSetChanged();
}
});
返回视图;
}
}
但例如,在按下删除按钮时,最后一行删除而不是当前行(单击的行)。如何获取当前行id

在我的活动中,我有以下代码:

//TEST CUSTOM LIST CREATION
        //generate list
        ArrayList<String> list = new ArrayList<String>();
        list.add("item1");
        list.add("item2");
        list.add("item3");
        list.add("item4");
        list.add("item5");
        list.add("item6");


        int[] laytypes = new int[50];
        laytypes[0]=0;
        laytypes[1]=0;
        laytypes[2]=0;
        laytypes[3]=0;
        laytypes[4]=0;
        laytypes[5]=0;
        laytypes[6]=0;


        //instantiate custom adapter
        MyCustomAdapter adapter = new MyCustomAdapter(list,laytypes,this);

        //handle listview and assign adapter
        ListView lView = (ListView)findViewById(R.id.listViewTest);
        lView.setAdapter(adapter);
//测试自定义列表创建
//生成列表
ArrayList=新建ArrayList();
列表。添加(“第1项”);
列表。添加(“第2项”);
列表。添加(“第3项”);
列表。添加(“第4项”);
列表。添加(“第5项”);
列表。添加(“第6项”);
int[]laytypes=新int[50];
laytypes[0]=0;
laytypes[1]=0;
laytypes[2]=0;
laytypes[3]=0;
laytypes[4]=0;
laytypes[5]=0;
laytypes[6]=0;
//实例化自定义适配器
MyCustomAdapter=新的MyCustomAdapter(列表、laytypes、此);
//处理listview并分配适配器
ListView lView=(ListView)findViewById(R.id.listViewTest);
lView.setAdapter(适配器);
公共类MyCustomAdapter扩展BaseAdapter实现ListAdapter{
private ArrayList list=new ArrayList();
//private ArrayList list2=新的ArrayList();
私人语境;
私有int[]类型;
//私有字符串[]列表;
公共MyCustomAdapter(ArrayList列表,int[]laytypes,上下文){
this.list=列表;
//this.list2=list2;
this.context=上下文;
这个.laytypes=laytypes;
}
@凌驾
public int getCount(){
返回list.size();
}
@凌驾
公共对象getItem(int位置){
返回列表。获取(位置);
}
@凌驾
公共长getItemId(int位置){
返回位置;
}
@凌驾
公共视图getView(最终整数位置、视图转换视图、视图组父视图){
//您唯一的错误是View=convertView;您的列表正在删除该项,但由于这一行,您的视图没有刷新
视图=空;
如果(视图==null){
LayoutFlater充气器=(LayoutFlater)context.getSystemService(context.LAYOUT\u充气器\u服务);
视图=充气机。充气(右布局列表项目)
public class MyCustomAdapter extends BaseAdapter implements ListAdapter {
private ArrayList<String> list = new ArrayList<String>();
// private ArrayList<String> list2 = new ArrayList<String>();
private Context context;
private int[] laytypes;
//private String[] list;


public MyCustomAdapter(ArrayList<String> list,int[] laytypes,Context context) {
    this.list = list;
    //this.list2 = list2;
    this.context = context;
    this.laytypes=laytypes;
}

@Override
public int getCount() {
    return list.size();
}

@Override
public Object getItem(int position) {
    return list.get(position);
}

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

@Override
public View getView(final int position, View convertView, ViewGroup parent) {

//Your only mistake was View view = convertView; your list was removing the item but because of this line your view was not refreshing 
    View view = null;
    if (view == null) {


        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        view = inflater.inflate(R.layout.list_item_firmware, null);

        TextView listItemText = (TextView)view.findViewById(R.id.list_item_st1);

        listItemText.setText(list.get(position));

/*
        if(laytypes[position]==1)
        {
            LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            view = inflater.inflate(R.layout.list_item_st1, null);


            ProgressBar DownloadBar;
            DownloadBar = (ProgressBar)view.findViewById(R.id.downloadProgressBar);
            DownloadBar.setProgress(50 + laytypes[position]);
            DownloadBar.setMax(100);

        }
        else if(laytypes[position]==2)
        {
            LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            view = inflater.inflate(R.layout.list_item_st2, null);

            TextView listItemText = (TextView)view.findViewById(R.id.list_item_string);

            listItemText.setText(list.get(position));

        }
        else
        {
            LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            view = inflater.inflate(R.layout.list_item_st3, null);

            TextView listItemText = (TextView)view.findViewById(R.id.list_item_string);

            listItemText.setText(list.get(position));
        }
*/

    }







    //Handle buttons and add onClickListeners
    Button deleteBtn = (Button)view.findViewById(R.id.delete_btn);
    deleteBtn.setTag(position);
    Button addBtn = (Button)view.findViewById(R.id.add_btn);
    addBtn.setTag(position);

    deleteBtn.setOnClickListener(new View.OnClickListener(){
        @Override
        public void onClick(View v) {
            //do something

            list.remove(position); //or some other task
            notifyDataSetChanged();
        }
    });
    addBtn.setOnClickListener(new View.OnClickListener(){
        @Override
        public void onClick(View v) {
            //do something
            laytypes[position]=1;
            //list2.remove(position);
            notifyDataSetChanged();
        }
    });

    return view;
}
}
    mGridView = (GridView) rootView.findViewById(R.id.grid_view);
...
    mAdapter = new ImageWithTitleAdapter(getContext(), new ArrayList<Movie>());
    mGridView.setAdapter(mAdapter);

    mGridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
            ((Callback) getActivity())
                    .onItemSelected(v, position);
        }
    });
/**
 * A callback interface that all activities containing this fragment must
 * implement. This mechanism allows activities to be notified of item
 * selections.
 */
public interface Callback {
    /**
     * DetailFragmentCallback for when an item has been selected.
     */
    void onItemSelected(View view, int pos);
}
public class MainActivity extends AppCompatActivity implements MainFragment.Callback {
   /**
 * MainFragment Callback override - handles click events on gridview items
 * @param v - the calling view containing the data item
 * @param pos - the position of the view from the grid_view
 */
@Override
public void onItemSelected(View v, int pos) {
    Movie movie =  (Movie) v.getTag();
    // We are splitting the logic here because we don't just need to load the detail fragment
    // with the data. We also need to completely switch activities if it is single-pane
    if (LayoutUtil.twoPanes(this)) {
        loadDetailInTwoPane(pos, movie);
    } else {
        Intent intent = new Intent(this, DetailActivity.class)
                .putExtra(getString(R.string.key_grid_view_movie), movie)
                .putExtra(getString(R.string.key_grid_view_position), pos);
        startActivity(intent);
    }
}