4

クリックしたリストビューの項目から文字列を取得する方法を知りたいと思っていました。たとえば、この形式のエントリがあります。

# - ジョンスミス

john@gmail.com

3451234532

ニューヨーク

ジョン・スミスを手に入れたい。その位置でアイテムを取得できますが、残りはわかりません。

私のコード:

package com.example.deneme;
import android.app.Activity;
import android.database.Cursor;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.Button;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.TextView;
import android.widget.Toast;


public class Activity2 extends Activity {

private SQLiteAdapter mySQLiteAdapter;
 ListView listContent;
 SimpleCursorAdapter cursorAdapter;
 Cursor cursor;
 Button buttonDeleteAll,buttonDeleteRow;

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);
setContentView(R.layout.activity2);


buttonDeleteAll = (Button)findViewById(R.id.deleteall);
buttonDeleteRow = (Button)findViewById(R.id.deleterow); 
listContent = (ListView)findViewById(R.id.contentlist);
listContent.setClickable(true);
buttonDeleteAll.setOnClickListener(buttonDeleteAllOnClickListener);
buttonDeleteRow.setOnClickListener(buttonDeleteRowOnClickListener);


mySQLiteAdapter = new SQLiteAdapter(this);
mySQLiteAdapter.openToWrite();



cursor = mySQLiteAdapter.queueAll();
String[] from = new String[]{ SQLiteAdapter.COLUMN_NAME, SQLiteAdapter.COLUMN_EMAIL,SQLiteAdapter.COLUMN_PHONE, SQLiteAdapter.COLUMN_ADDRESS};

int[] to = new int[]{R.id.text1, R.id.text2,R.id.text3, R.id.text4};

cursorAdapter = new SimpleCursorAdapter(this, R.layout.row, cursor, from, to);
listContent.setAdapter(cursorAdapter);



listContent.setOnItemClickListener(new OnItemClickListener() {

    public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,long arg3) {

        String str = ((TextView)arg1).getText().toString();
        Toast.makeText(Activity2.this, str, Toast.LENGTH_SHORT).show();
    }
});



}


   Button.OnClickListener buttonDeleteRowOnClickListener = new Button.OnClickListener(){

       public void onClick(View arg0) {

     //    String n = inputContent1.getText().toString();
     //    mySQLiteAdapter.deleteRow(n);
           updateList();
           Toast.makeText(Activity2.this, "Entry Deleted", Toast.LENGTH_SHORT).show();      


       }
        };

        Button.OnClickListener buttonDeleteAllOnClickListener
        = new Button.OnClickListener(){
       public void onClick(View arg0) {

        mySQLiteAdapter.deleteAll();
        updateList();
        Toast.makeText(Activity2.this, "All Entries Deleted", Toast.LENGTH_SHORT).show();      

       }
        };

        private void updateList(){
              cursor.requery();
               }
}

あなたの方法を使用した後、私はこれらのエラーを受け取りました:

07-27 07:52:15.726: E/AndroidRuntime(856): FATAL EXCEPTION: main
07-27 07:52:15.726: E/AndroidRuntime(856): java.lang.ClassCastException:              android.widget.LinearLayout
07-27 07:52:15.726: E/AndroidRuntime(856):  at  com.example.deneme.Activity2$3.onItemClick(Activity2.java:58)
07-27 07:52:15.726: E/AndroidRuntime(856):  at android.widget.AdapterView.performItemClick(AdapterView.java:284)
07-27 07:52:15.726: E/AndroidRuntime(856):  at android.widget.ListView.performItemClick(ListView.java:3513)
07-27 07:52:15.726: E/AndroidRuntime(856):  at android.widget.AbsListView$PerformClick.run(AbsListView.java:1812)
4

3 に答える 3

3

それは、リストビューに何を入力したかによって異なります。それらがTextViewのものである場合、あなたがしなければならないのはこれだけです:

((TextView)arg1).getText().toString()

基本的View arg1には、クリックされたビューです。そのリストにデータを入力したことを考えると、(アダプターで) ビューを作成して返したのはあなたであるため、そのビューが何であるかがわかります。

public View getView(int position, View convertView, ViewGroup parent)

したがって、そのビューのタイプが何であれ、そのドキュメントをチェックして、そこからテキストを取得する方法を確認してください

編集:

使用しているカーソル アダプターは、行ごとに LinearLayout を返します。選択された列ごとに 1 つずつ、いくつかの TextViews があります。最初の列を取得するには、次のようにします。

LinearLayout row = (LinearLayout)((LinearLayout)arg1).getChildAt(0);
TextView column = (TextView)row.getChildAt(0);
String text = column.getText().toString();

別の列が必要な場合は、引数を次のように変更しますgetChildAt(i)

于 2012-07-27T07:49:49.880 に答える
3
listContent.setOnItemClickListener(new OnItemClickListener() {
    public void onItemClick(AdapterView parent, View v, int position, long id) {
        Cursor cursor = (Cursor) parent.getItemAtPosition(position);
        String name = cursor.getString(cursor.getColumnIndex(SQLiteAdapter.COLUMN_EMAIL));
        Toast.makeText(Activity2.this, name, Toast.LENGTH_SHORT).show();
    }
});
于 2012-07-27T08:23:13.787 に答える
0

テキストを取得するには、単に使用します

String item = ((TextView)arg1).getText().toString();

別の注意として、実装する関数の引数の名前を次のように変更すると便利です。

public void onItemClick(AdapterView<?> parent, View view, int position,
                long id)

これで、各パラメーターの動作が明確にわかります。

于 2012-07-27T07:48:58.913 に答える