【发布时间】: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