Android 如何在自定义列表适配器中获取位置id?
我试着列清单。在此列表中,每行将有3种状态: 1) 使用文本和按钮“获取”启动状态 2) 使用进度条和“取消”按钮上载状态 3) 具有文本和按钮上传的就绪状态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
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);
}
}