2016-05-19 12 views
0

私はandroid devを初めて使いこなしています。基本的に私はdatabasedバックアップ辞書のアプリを持っています。ユーザーが単語をクリックすると、定義がトーストに表示されます。私は新しいウィンドウで単語+定義をオープンしたいと思います:新しいウィンドウでListViewアイテムの詳細を開く方法は?

public class MainActivity extends AppCompatActivity { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     mDB = new DictionaryDatabase(this); 
     mEditTextWord = (EditText)findViewById(R.id.editTextWord); 
     mEditTextDefinition = (EditText)findViewById(R.id.editTextDefinition); 
     Button buttonAddUpdate = (Button)findViewById(R.id.buttonAddUpdate); 

     buttonAddUpdate.setOnClickListener(
       new View.OnClickListener() { 
        @Override 
        public void onClick(View v) { 
          saveRecord(); 
        } 
       }); 

     mListView = (ListView)findViewById(R.id.listView); 
     mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> parent, View 
        view, int position, long id) { 
       Toast.makeText(MainActivity.this, 
         mDB.getDefinition(id), Toast.LENGTH_SHORT).show(); 
      } 
     }); 
     mListView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { 
      @Override 
      public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) { 
       Toast.makeText(MainActivity.this, 
         "Records deleted = " + mDB.deleteRecord(id), 
         Toast.LENGTH_SHORT).show(); 
       updateWordList(); 
       return true; 
      } 
     }); 
     updateWordList(); 

    } 

そして、リストビューのレイアウト:ここで

は私のMainActivityの関連する部分である

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context="com.naqishop.sqlitedatabase.MainActivity"> 


     <EditText 
      android:id="@+id/editTextWord" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_alignParentTop="true" 
      android:layout_alignParentLeft="true" 
      android:layout_alignParentStart="true" 
      android:hint="Word"/> 
     <EditText 
      android:id="@+id/editTextDefinition" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_below="@+id/editTextWord" 
      android:layout_alignParentLeft="true" 
      android:layout_alignParentStart="true" 
      android:hint="Definition"/> 
     <Button 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="Save" 
      android:id="@+id/buttonAddUpdate" 
      android:layout_alignParentRight="true" 
      android:layout_alignParentTop="true" /> 
     <ListView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:id="@+id/listView" 
      android:layout_below="@+id/editTextDefinition" 
      android:layout_alignParentLeft="true" 
      android:layout_alignParentBottom="true" /> 


    </RelativeLayout> 

私はしました似たような疑問に答えるためにSOを解決しようとしましたが失敗しました。

UPDATE:あなたはまた、同様に、新たに立ち上げた活動に定義を送信することもできます

Intent intent = new Intent(this, SecondActivity.class); 
startActivity(intent); 

:ここでは、このような活動を開始することができ、私のDictionaryDatabase.java

DictionaryDatabase(Context context) { 
    super(context, DATABASE_NAME, null, DATABASE_VERSION); 
} 
@Override 
public void onCreate(SQLiteDatabase db) { 
    db.execSQL("CREATE TABLE " + TABLE_DICTIONARY + 
      "(_id integer PRIMARY KEY," + 
      FIELD_WORD + " TEXT, " + 
      FIELD_DEFINITION + " TEXT);"); 
} 

@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
    //Handle database upgrade as needed 
} 

public void saveRecord(String word, String definition) { 
    long id = findWordID(word); 
    if (id>0) { 
     updateRecord(id, word,definition); 
    } else { 
     addRecord(word,definition); 
    } 

    } 

public long addRecord(String word, String definition) { 
    SQLiteDatabase db = getWritableDatabase(); 
    ContentValues values = new ContentValues(); 
    values.put(FIELD_WORD, word); 
    values.put(FIELD_DEFINITION, definition); 
    return db.insert(TABLE_DICTIONARY, null, values); 
} 
public int updateRecord(long id, String word, String definition) { 
    SQLiteDatabase db = getWritableDatabase(); 
    ContentValues values = new ContentValues(); 
    values.put("_id", id); 
    values.put(FIELD_WORD, word); 
    values.put(FIELD_DEFINITION, definition); 
    return db.update(TABLE_DICTIONARY, values, "_id = ?", 
      new String[]{String.valueOf(id)}); 
} 
public int deleteRecord(long id) { 
    SQLiteDatabase db = getWritableDatabase(); 
    return db.delete(TABLE_DICTIONARY, "_id = ?", new 
      String[]{String.valueOf(id)}); 
} 

public long findWordID(String word) { 
    long returnVal = -1; 
    SQLiteDatabase db = getReadableDatabase(); 
    Cursor cursor = db.rawQuery(
      "SELECT _id FROM " + TABLE_DICTIONARY + 
        " WHERE " + FIELD_WORD + " = ?", new String[]{word}); 
    Log.i("findWordID","getCount()="+cursor.getCount()); 
    if (cursor.getCount() == 1) { 
     cursor.moveToFirst(); 
     returnVal = cursor.getInt(0); 
    } 
    return returnVal; 
} 

public String getDefinition(long id) { 
    String returnVal = ""; 
    SQLiteDatabase db = getReadableDatabase(); 
    Cursor cursor = db.rawQuery(
      "SELECT definition FROM " + TABLE_DICTIONARY + 
        " WHERE _id = ?", new String[]{String.valueOf(id)}); 
    if (cursor.getCount() == 1) { 
     cursor.moveToFirst(); 
     returnVal = cursor.getString(0); 
    } 
    return returnVal; 
} 
public Cursor getWordList() { 
    SQLiteDatabase db = getReadableDatabase(); 
    String query = "SELECT _id, " + FIELD_WORD + 
      " FROM " + TABLE_DICTIONARY + " ORDER BY " + FIELD_WORD + 
      " ASC"; 
    return db.rawQuery(query, null); 
} 

答えて

1

新しいDetailActivity.javaを作成すると、manifestにこれを追加できます。 単語をクリックすると、インテントを詳細アクティビティにシフトします。

Intent intent = new Intent(this,DetailActivity.class); 
startActivity(intent); 

あなたはputExtra

mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> parent, View 
        view, int position, long id) { 
        Intent intent = new Intent(view.getContext(),DetailActivity.class); 
        intent.putExtra("key",mDB.getDefinition(id)+""); // your value that ypu want to send 
        startActivity(intent); 
      } 
     }); 

を使用して、この目的で情報を渡すことができ、先端のためのあなたのDetailActivity

try{ 
    String value = getIntent().getStringExtra("key"); 
} 
catch(Exception e){ 
    e.printStackTrace(); 
} 
+0

これを実際のonClickメソッドに埋め込むことはできますか?私は 'key'と' value'の代わりに何を使うべきか分かりません。 – Karlom

+0

これは小さな変更、 'Intent intent = new Intent(view.getContext()、DetailActivity.class);')で動作しましたので、修正してください。ありがとうAnuj。 – Karlom

+0

@カールム:私の答えを更新しました:) –

1

ですそう:

public class MainActivity extends AppCompatActivity { 
    public static String EXTRA_DEFINITION = "definition"; 

    ... 

    Intent intent = new Intent(this, SecondActivity.class); 
    intent.putExtra(EXTRA_DEFINITION, mDB.getDefinition(id)); 
    startActivity(intent); 

あなたの新しい活動のonCreate方法yのようにこれを行うことができます:

Intent intent = new Intent(); //get the intent that launched activity 
String definition = intent.getStringExtra(MainActivity.EXTRA_DEFINITION); 
//display the definition 

詳細については、thisを参照してください。

+0

のおかげで、この値を取得します。この場合、 'EXTRA_DEFINITION'は何をすべきでしょうか? – Karlom

+0

https://developer.android.com/reference/android/content/Intent.html#putExtra%28java.lang.String,%20java.lang.String%29をご覧ください。あなたはそれをインテントに入れたときとそれを取り出すときに、その定義を識別する固有の名前が必要です。編集を参照してください。 – Michiyo

+0

まあ、私はまだ 'EXTRA_DEFINITION'の代わりにどのキーを置くべきかを理解しようとしています。私が今追加したデータベースクラスのメソッドを見てください。 – Karlom

関連する問題