【问题标题】:How to use getPosition() to get the ListView value?如何使用 getPosition() 获取 ListView 值?
【发布时间】:2016-03-03 14:41:20
【问题描述】:

在 Activity WorkDetailsTable 中,它有一个ListView,如下所示。当它被点击时,它应该在 Add_Details_Information EditText

上显示值

假设第一个列表被点击,它打算Add_Details_Information

请注意,editText 上的值实际上是从 Activity A 中的第二个列表中获取的。但我想要的是根据他们的位置而不是最新的价值来获得价值。

工作详情表

int mClickedPosition;
MyCustomBaseAdapter objMyCustomBaseAdapter;
ArrayList<SearchResults> results=new ArrayList<SearchResults>();

listview.setOnItemClickListener(new AdapterView.OnItemClickListener() { // if listView is clicked
            @Override
            public void onItemClick(AdapterView<?> a, View v, int position, long id) {
                mClickedPosition = position;
                // how to getPosition???
                Intent i = new Intent(getApplication(), Add_Details_Information.class);
                i.putExtra("ReceiveProject", ReceiveProject);
                i.putExtra("ReceiveDescription", ReceiveDescription);
                i.putExtra("ReceiveProgress", ReceiveProgress);
                i.putExtra("ReceiveTimeIn", ReceiveTimeIn);
                i.putExtra("ReceiveTimeOut", ReceiveTimeOut);
                i.putExtra("date",date);
                i.putExtra("status", status);
                startActivityForResult(i,PROJECT_REQUEST_CODE);
            }
        });
    }

Add_Details_Information

 @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.add_details_information);
        addItemsOnSpinner(); // Spinner for project/service/training
        tp = new TimePick(); // call tmePick
        description=(EditText)findViewById(R.id.editTextWorkDescription);
        timeIn=(EditText)findViewById(R.id.TimeIn);
        timeOut=(EditText)findViewById(R.id.TimeOut);
        save=(Button)findViewById(R.id.saveButton);
        seekBar=(SeekBar)findViewById(R.id.seekBarPercentage);
        progressText=(TextView)findViewById(R.id.textProgress);
        progressText.setText("Covered:" + "" + seekBar.getProgress() + "/" + seekBar.getMax());

        if(getIntent().getExtras()!=null)
        {
            final String Project1=getIntent().getStringExtra("ReceiveProject");
            final String Description1=getIntent().getStringExtra("ReceiveDescription");
            final int Progress1=getIntent().getIntExtra("ReceiveProgress", 0);
            final String TimeIn1=getIntent().getStringExtra("ReceiveTimeIn");
            final String TimeOut1=getIntent().getStringExtra("ReceiveTimeOut");


           // project.setText(Project1);
            description.setText(Description1);
            seekBar.setProgress(Progress1);
            timeIn.setText(TimeIn1);
            timeOut.setText(TimeOut1);
            seekBar.setProgress(Progress1);
            progressText.setText("Covered:" + "" + seekBar.getProgress() + "/" + seekBar.getMax());

        }

MyCustomBaseAdapter

public class MyCustomBaseAdapter extends BaseAdapter{   // for ListView in WorkDetailsTable


        private static ArrayList<SearchResults> searchArrayList;

        private LayoutInflater mInflater;

        public MyCustomBaseAdapter(Context context, ArrayList<SearchResults> results) {
            searchArrayList = results;
            mInflater = LayoutInflater.from(context);
        }

        public int getCount() {
            return searchArrayList.size();
        }



        public Object getItem(int position) {
            return searchArrayList.get(position);
        }

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

       public void addNewItem(String P,String D,int Per,String I,String O)
      {
        SearchResults obj=new SearchResults();
        obj.setProject(" Project/Service/Training : "+P);
        obj.setDescription(" Work Description : " + D);
        obj.setProgress(" Progress : " + Per);
        obj.setTimeIn(" Time In : " + I);
        obj.setTimeOut(" Time Out : " + O);
        searchArrayList.add(obj);
        this. notifyDataSetChanged();
    }



        public View getView(int position, View convertView, ViewGroup parent) {
            ViewHolder holder;
            if (convertView == null) {
                convertView = mInflater.inflate(R.layout.custom_row_view, null);
                holder = new ViewHolder();
                holder.txtProject= (TextView) convertView.findViewById(R.id.ListProject);
                holder.txtDescription = (TextView) convertView.findViewById(R.id.ListDescription);
                holder.txtProgress = (TextView) convertView.findViewById(R.id.ListProgress);
                holder.txtIn=(TextView)convertView.findViewById(R.id.ListTimeIn);
                holder.txtOut=(TextView)convertView.findViewById(R.id.ListTimeOut);

                convertView.setTag(holder);
            } else {
                holder = (ViewHolder) convertView.getTag();
            }

            holder.txtProject.setText(searchArrayList.get(position).getProject());
            holder.txtDescription.setText(searchArrayList.get(position).getDescription());
            holder.txtProgress.setText(searchArrayList.get(position).getProgress());
            holder.txtIn.setText(searchArrayList.get(position).getTimeIn());
            holder.txtOut.setText(searchArrayList.get(position).getTimeOut());

            return convertView;
        }

        static class ViewHolder {
            TextView txtProject;
            TextView txtDescription;
            TextView txtProgress;
            TextView txtIn;
            TextView txtOut;
        }
    }

试用代码

listview.setOnItemClickListener(new AdapterView.OnItemClickListener() { // if listView is clicked
    @Override
    public void onItemClick(AdapterView<?> a, View v, int position, long id) {
      Object o=listview.getItemAtPosition(position);
        SearchResults fullObject=(SearchResults)o;
        String ReceiveDescription=((SearchResults) o).getDescription();
        Intent i = new Intent(getApplication(), Add_Details_Information.class);

        i.putExtra("ReceiveDescription", ReceiveDescription);

        startActivityForResult(i,PROJECT_REQUEST_CODE);
    }
});
}

【问题讨论】:

  • 这取决于您的 ListView Adapter 实现。什么样的适配器支持您的列表视图?
  • @TimMalseed customBaseAdapter
  • @TimMalseed 需要使用 results.get(position) 吗?
  • 我建议向您的适配器 getIem(int position) 添加一个方法,该方法返回该位置的 SearchResult (results.get(position))。然后您可以从该对象访问您的搜索结果字段。getAdapter().getItem(position)...
  • @TimMalseed 感谢您的建议。所以现在我需要在onItemClick 中拨打getIem(int position) 吗?

标签: android listview android-listview position


【解决方案1】:

试试这个:

public View getViewByPosition(int pos, ListView listView) {
    final int firstListItemPosition = listView.getFirstVisiblePosition();
    final int lastListItemPosition = firstListItemPosition + listView.getChildCount() - 1;

    if (pos < firstListItemPosition || pos > lastListItemPosition ) {
        return listView.getAdapter().getView(pos, null, listView);
    } else {
        final int childIndex = pos - firstListItemPosition;
        return listView.getChildAt(childIndex);
    }
}

【讨论】:

  • 感谢您的回答。我已经用另一种方法解决了
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-10
  • 1970-01-01
  • 2012-06-15
相关资源
最近更新 更多