2012-11-27 1 views
0

SQLite 데이터베이스에서 데이터를로드하는 listView가 있는데 지금은 목록에 onclicklistener를 구현하고 싶습니다. 사용자가 목록을 클릭하면 텍스트를 다음 활동으로 가져와 해당 데이터를 TextView에로드해야합니다. 내 질문은 어떻게 목록의 데이터를 전달할 것인가입니다. 예를 들어 "주제"목록이고 사용자는 "내 집"항목을 클릭합니다. "My Home"항목을 다음 활동으로 전달하여 각 해당 데이터를 검색 할 수 있는지 확인합니다.안드로이드가 SQLite 데이터베이스의 데이터를 다음 액티비티로로드합니다.

어떻게 해결할 수 있습니까? 나는 새로운 의도에 "엑스트라를"넣을 수 있습니까? 또는 다른 방법이 있습니다.

ListView listContent = (ListView) findViewById(R.id.contentlist); 
     mySQLiteAdapter = new SQLiteAdapter(this); 
     mySQLiteAdapter.openToRead(); 

     Cursor cursor = mySQLiteAdapter.queueAll(); 
     startManagingCursor(cursor); 

     String[] from = new String[] { SQLiteAdapter.KEY_CONTENT }; 
     int[] to = new int[] { R.id.text }; 

     SimpleCursorAdapter cursorAdapter = new SimpleCursorAdapter(this, R.layout.listrow, cursor, from, to); 

     listContent.setAdapter(cursorAdapter); 

     mySQLiteAdapter.close(); 

     //Onclick ListView setlistener 
     listContent.setTextFilterEnabled(true); 
     listContent.setOnItemClickListener(new OnItemClickListener() { 
      public void onItemClick(AdapterView<?> parent, View view, 
        int position, long id) { 
       Intent summaryIntent = new Intent(DocumentListActivity.this, ViewDocumentActivity.class); 
//    summaryIntent.putExtra("SummTopic", value); 
      } 
     }); 

편집 : : 아래 목록보기를 표시 내 코드의 일부 이 제품은 또한 다음 활동에 있습니다.

android.database.CursorIndexOutOfBoundsException: Index -1 requested, with a size of 0 

이 도와주세요 : 데이터베이스에서 검색하는 동안

Intent i = getIntent(); 
     extraTopic = i.getStringExtra("SummTopic"); 

     mydb = openOrCreateDatabase(DBNAME, Context.MODE_PRIVATE,null); 
     Cursor allrows = mydb.rawQuery("SELECT * FROM "+ TABLE + " WHERE topic = \" " + extraTopic + " \" " , null); 

     Integer cindex = allrows.getColumnIndex("topic"); 
     Integer cindex1 = allrows.getColumnIndex("text1"); 
     Integer cindex2 = allrows.getColumnIndex("text2"); 

나는 오류를 얻었다.

감사합니다.

답변

1
 public void onItemClick(AdapterView<?> parent, View view, 
       int position, long id) { 
      Intent summaryIntent = new Intent(DocumentListActivity.this, ViewDocumentActivity.class); 
      Cursor c = (Cursor)parent.getItemAtPosition(position); 
      summaryIntent.putExtra("SummTopic", c.getString(c.getColumnIndex(SQLiteAdapter.KEY_CONTENT))); 
      startActivity(summaryIntent); 
     } 

를 나열하거나 (id를 전달할 수에

@Override 
    public Object getItem(int position) { 
     //Note that return type should be the same you you use to initilise items oof the adapter. E.g. String or some custom Topic class 
     Object someObject = mObjects[position]; 

     return someObject;  
    } 

그런 다음 당신이 항목을 클릭 리스너를 설정해야합니다 summaryIntent.putExtra("SummTopicId", id);)의이 행이 ID

편집과 주제의 향후 활동에 "DB를 물어"

protected void onCreate(Bundle savedInstanceState){ 
    Intent i = getIntent(); 
    String extraTopic = i.getStringExtra("SummTopic"); 
    //or long extraTopic = i.getLongExtra("SummTopic"); if you put id there (which is better) 
     mydb = openOrCreateDatabase(DBNAME, Context.MODE_PRIVATE,null); 
    String[] args = new String[] { extraTopic }; 
    //or String[] args = new String[] { Long.toString(extraTopic) }; with id version 
     Cursor singleRow = mydb.rawQuery("SELECT * FROM "+ TABLE + " WHERE topic=?" , args); 
    //args is better then escaping special chars in query 
    //and it should be single row so we've changed var name :) 
    if(singleRow.moveToFirst()){ //we should do moveToFirst before we can use Cursor 
     Integer cindex = allrows.getColumnIndex("topic"); 
     Integer cindex1 = allrows.getColumnIndex("text1"); 
     Integer cindex2 = allrows.getColumnIndex("text2"); 
     //setup views and stuff .... 
    }else{ 
     Toast.makeText(this, "Oops we did not find topic, detail activity was closed", Toast.LENGTH_SHORT).show(); 
     finish(); 
    } 
} 
+0

안녕하세요, 도움이됩니다. 감사. 하지만 다음 활동에서 검색하는 동안 오류가 있습니다. 위 코드를 편집 된 부분에서 참조 할 수있게 도와 주시겠습니까? 덕분에 – mellissa

+0

나는 대답을 바꿨다 – Selvin

+0

완벽하게 작동합니다. 무리 감사! – mellissa

0

여기에 인 텐트를 사용할 수 있습니다.

Intent intent= new Intent(context,classname.class); 
intent.putExtra("name",string); 

intent.getextra()을 사용하여 대상 클래스 이름으로 가져올 수 있습니다. 당신이 당신의 문자열을 참조하고 다음과 같은 텍스트를 얻을 필요가 setContentView(...) 사용 후

+0

mellissa u가 문제를 해결 했습니까 ?? – Subburaj

0

...

EditText et = (EditText) findViewById(R.id.my_edit_text); 
String theText = et.getText().toString(); 

는 인 텐트를 사용하는 다른 활동에 전달합니다. 예를 ... 새로운 활동 (in onCreate()), 당신이 의도를 얻고 문자열을 검색에서

Intent i = new Intent(this, MyNewActivity.class); 
i.putExtra("text_label", theText); 
startActivity(i); 

...

public class MyNewActivity extends Activity { 

    String uriString; 

    @Override 
    protected void onCreate(...) { 

     ... 

     Intent i = getIntent(); 
     uriString = i.getStringExtra("text_label"); 

    } 
} 

편집 :

이 목록보기에서 문자열을 얻을 수 아래 코드를 적용하고 ITEM 문자열을 가져와 다음 활동으로 넘어갈 수 있습니다.

listContent.setOnItemClickListener(new OnItemClickListener() { 
      public void onItemClick(AdapterView<?> parent, View view, 
        int position, long id) { 
    String ITEM=listContent.getItemAtPosition(position); 
       //Intent summaryIntent = new Intent(DocumentListActivity.this, // ViewDocumentActivity.class); 
//    summaryIntent.putExtra("SummTopic", value); 
      } 
     }); 
+0

ListView에서 텍스트를 가져 오는 방법은 무엇입니까? 어쩌면 나는 제대로 강조하지 않았다. 나는 ListView의 일부인 "Topic"을 얻고 싶다. – mellissa

+0

편집 내 답변. 통과해라. –

-1

일부 데이터로 목록을 채우기 위해 어댑터를 사용하고있는 것 같습니다.그래서 당신은 당신의 어댑터의 getItem (INT 위치) 메소드를 오버라이드 (override) 할 필요가 : 당신이

mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { 
       Object someObject = adapterView.getItemAtPosition(i); 

       Intent i = new Intent(this, MyNewActivity.class); 
       i.putExtra("text_label", someObject.toString()); 
       startActivity(i); 
      } 
     }); 
+0

그는 CursorAdapter를 사용하고 있습니다 ... getItem을 재정의 할 필요가 없습니다 ... – Selvin

관련 문제