我在android中开发一个简单的应用程序。在这个应用程序中,我有一个列表视图,显示收件箱短信。单击列表视图的任何项目时,会出现一个AlertDialog,其中包含Ignore,Cancel和&修复按钮。(请参考图像)。
点击AlertDailog的“修复”按钮,我想获取listview所选项目的文本。
使用以下代码,我得到字符串'str'中的文本是这样的: - com.example.myapp.Items@412a7d08 (在日志和吐司中)。
我想要字符串'str'中的普通文本。 (即列表视图中所选项目的文本)。 或换句话说, 我想要与String str。中的listview项目相同的文本。
有人可以帮我解决这个问题吗?
这是我写的代码:
TextView tv_view_task;
ListView lv_view_task;
static String sms = "";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_view_task);
tv_view_task=(TextView) findViewById(R.id.tv_view_task);
lv_view_task=(ListView) findViewById(R.id.lv_view_task);
//List<String> msgList = getSms();
MyAdapter adapter=new MyAdapter(this,getSms());
lv_view_task.setAdapter(adapter);
lv_view_task.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> arg0, View arg1,final int arg2,
long arg3) {
// TODO Auto-generated method stub
AlertDialog.Builder alert=new AlertDialog.Builder(ViewTask.this);
alert.setTitle("What you want to do ?");
alert.setIcon(R.drawable.ic_launcher);
alert.setPositiveButton("Fix",new OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
String str=lv_view_task.getItemAtPosition(arg2).toString();
Toast.makeText(getApplicationContext(), str,Toast.LENGTH_LONG).show();
}
});
alert.setNegativeButton("Ignore",new OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
}
});
alert.setNeutralButton("cancel",new OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
dialog.cancel();
}
});
AlertDialog ale=alert.create();
ale.show();
}
});
}
我的适配器代码是:
package com.example.myapp;
import java.util.ArrayList;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;
public class MyAdapter extends ArrayAdapter<Items>
{
private final Context context;
private final ArrayList<Items> itemsArrayList;
public MyAdapter(Context context,ArrayList<Items>itemsArrayList) {
super(context, R.layout.view_task_list_view,itemsArrayList);
// TODO Auto-generated constructor stub
this.context=context;
this.itemsArrayList=itemsArrayList;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
LayoutInflater inflator=(LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View rowView=inflator.inflate(R.layout.view_task_list_view,parent,false);
TextView label=(TextView) rowView.findViewById(R.id.label);
//TextView view_task_priority=(TextView) rowView.findViewById(R.id.view_task_tv_priority);
label.setText(itemsArrayList.get(position).getTitle());
//view_task_priority.setText(itemsArrayList.get(position).getPriority());
return rowView;
}
}
自定义列表视图的XML ...:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="30px"
android:paddingLeft="5dp"
android:text="title"
android:textColor="@color/Black">
</TextView>
图片:1)ListView:
2)AlertDialog:用户点击“修复”以获取listView的选定项目文本。
答案 0 :(得分:9)
lv_view_task.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> arg0, View arg1,final int arg2,
long arg3) {
final View selectedView v = arg1 ; // Save selected view in final variable**
AlertDialog.Builder alert=new AlertDialog.Builder(ViewTask.this);
alert.setTitle("What you want to do ?");
alert.setIcon(R.drawable.ic_launcher);
alert.setPositiveButton("Fix",new OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
String str=lv_view_task.getItemAtPosition(arg2).toString();
Toast.makeText(getApplicationContext(), str,Toast.LENGTH_LONG).show();
//Access view object v here
TextView label=(TextView) v.findViewById(R.id.label);
String xyz = label.getText();
}
});
答案 1 :(得分:1)
方法
onItemClick(AdapterView<?> arg0, View arg1,final int arg2,
long arg3){
String txt = ((TextView)arg1).getText().toString();
}
您可以通过将视图arg1
投射到TextView
来访问该视图的文本,这样可以授予您访问方法getText()
的权限,然后您可以根据需要使用该文本(当然只有当视图是textView
)时才会显示。