从单击的列表视图项中获取文本

时间:2013-04-22 19:17:30

标签: android listview

我的ListView是从我的数据库中提取的食谱列表。我想在ListView中获取单击项目的文本。 ListView通过数据库调用和cursoradapter填充。我想使用所选项的文本在另一个活动中进行另一个数据库调用。这是代码块

listView.setClickable(true);
    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> parent, View v, int position,
                long id) {
            final String text = ((TextView)v).getText().toString();
            recipeid = myDBAdapter.getRecipeID(text);
            Intent intent = new Intent(ListAllRecipes.this, DisplayRecipe.class);
            intent.putExtra("recipeid", recipeid);
            startActivity(intent);

        }

    });

当我运行我的代码时,我得到了

04-22 14:08:37.022: E/AndroidRuntime(25206): FATAL EXCEPTION: main
04-22 14:08:37.022: E/AndroidRuntime(25206): java.lang.ClassCastException: android.widget.RelativeLayout cannot be cast to android.widget.TextView
04-22 14:08:37.022: E/AndroidRuntime(25206):    at com.example.ketorecipes.ListAllRecipes$1.onItemClick(ListAllRecipes.java:47)

当我点击ListView中的某个项目时。

以下是一个块中的Activity:

public class ListAllRecipes extends Activity{
private DBAdapter myDBAdapter;
private ListView listView;
private int recipeid;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.list_all);



    myDBAdapter = new DBAdapter(this);
    myDBAdapter.openToRead();
    Cursor c = myDBAdapter.getValues();

    listView = (ListView)findViewById(R.id.listView1);
    String[] from = new String[] {"_id"};
    int[] to = new int[] {R.id.name_entry};
    SimpleCursorAdapter cursorAdapter = new SimpleCursorAdapter(this, R.layout.list_entry, c, from, to);
    listView.setAdapter(cursorAdapter);



    listView.setClickable(true);
    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> parent, View v, int position,
                long id) {
            final String text = ((TextView)v).getText().toString();
            recipeid = myDBAdapter.getRecipeID(text);
            Intent intent = new Intent(ListAllRecipes.this, DisplayRecipe.class);
            intent.putExtra("recipeid", recipeid);
            startActivity(intent);

        }

    });
}

}

3 个答案:

答案 0 :(得分:1)

我建议使用position字段onItemClickparent.getItemAtPosition(position)获取该项目,这将返回代表您刚刚点击的项目的条目(可能需要转换为正确的类型),应该是你想要的,不需要手动从UI元素中获取值。

答案 1 :(得分:1)

您将_id与R.id.name_entry相关联,因此您的列表包含_id的值。

String[] from = new String[] {"_id"};
int[] to = new int[] {R.id.name_entry};  

如果是这样,您可以通过

获取_id的名称
Cursor c = cursorAdapter.getCursor();
String text = c.getString(c.getColumnIndex("_id"));

答案 2 :(得分:0)

我很确定返回的视图(v)不是textview。 您的列表项是自定义视图,因此您需要通过ID查找视图来获取视图。