2016-10-27 5 views
0

私は新しいコンタクトをsqliteテーブルに保存する電話帳アプリケーションを持っています。私はに活動を持ち、と(リスト)を表示します。を見ると、うまくいきます。onItemClickListener()を使用して、あるアクティビティから別のアクティビティへデータを渡す(Sqliteデータベースに保存)

ここでは、listViewで接触の詳細を表示するDetailsアクティビティが必要です。私はonItemClickListener()を使用すべきであることを知っていますが、私が試したことはすべて動作していません。

詳細アクティビティには、3つのTextView(名前、姓、電話番号)が含まれています。
私は初心者ですから、どうやってそれをどうやって教えてくれますか?

DisplayDataActivity.class:

public class DisplayDataActivity extends AppCompatActivity { 




ListView listView; 
SQLiteDatabase sqLiteDatabase; 
UserDbHelper userDbHelper; 
Cursor cursor; 
ListDataAdapter listDataAdapter; 
SimpleCursorAdapter adapter; 
String name, lastName; 
TextView proba; 

//FROM SEARCH 
EditText Search_Last; 
String search_Last; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_display_data); 



    Search_Last = (EditText) findViewById(R.id.searchName); 


    listView = (ListView) findViewById(R.id.list_view_display); 
    listDataAdapter = new ListDataAdapter(getApplicationContext(), R.layout.row_layout); 
    listView.setAdapter(listDataAdapter); 


    userDbHelper = new UserDbHelper(getApplicationContext()); 
    sqLiteDatabase = userDbHelper.getReadableDatabase(); 
    cursor = userDbHelper.getInformations(sqLiteDatabase); 
    if (cursor.moveToFirst()) { 
     do { 

      String name, lastName, phone; 
      name = cursor.getString(0); 
      lastName = cursor.getString(1); 
      phone = cursor.getString(2); 
      DataProvider dataProvider = new DataProvider(name, lastName, phone); 
      listDataAdapter.add(dataProvider); 


     } while (cursor.moveToNext()); 
    } 

    proba = (TextView) findViewById(R.id.text_user_name); 

    // Opens detailed view when contact is clicked 
    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 

      // What code goes here?? 

      Intent myIntent = new Intent(getBaseContext(), DetailView.class); 
      startActivity(myIntent); 


    });} 

DataProvider.class:

public class DataProvider { 

private String name; 
private String lastName; 
private String phone; 

public String getLastName() { 
    return lastName; 
} 

public void setLastName(String lastName) { 
    this.lastName = lastName; 
} 

public String getName() { 
    return name; 
} 

public void setName(String name) { 
    this.name = name; 
} 

public String getPhone() { return phone; } 

public void setPhone(String phone) {this.phone = phone;} 



public DataProvider(String name, String lastName, String phone) 
{ 
    this.name = name; 
    this.lastName = lastName; 
    this.phone = phone; 


}} 

ListDataAdapter.class:

public class ListDataAdapter extends ArrayAdapter { 
List list = new ArrayList(); 

public ListDataAdapter(Context context, int resource) { 
    super(context, resource); 
} 

static class LayoutHandler 
{ 
    TextView NAME, LASTNAME; 

} 

@Override 
public void add(Object object) { 
    super.add(object); 
    list.add(object); 
} 

@Override 
public int getCount() { 
    return list.size(); 
} 

@Nullable 
@Override 
public Object getItem(int position) { 
    return list.get(position); 
} 

@NonNull 
@Override 
public View getView(int position, View convertView, ViewGroup parent) { 

    View row = convertView; 
    LayoutHandler layoutHandler; 
    if(row == null) 
    { 
     LayoutInflater layoutInflater = (LayoutInflater) this.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     row = layoutInflater.inflate(R.layout.row_layout, parent, false); 
     layoutHandler = new LayoutHandler(); 
     layoutHandler.NAME = (TextView) row.findViewById(R.id.text_user_name); 
     layoutHandler.LASTNAME = (TextView) row.findViewById(R.id.text_user_last); 
     row.setTag(layoutHandler); 

    } 
    else 
    { 
     layoutHandler = (LayoutHandler) row.getTag(); 


    } 
    DataProvider dataProvider = (DataProvider) this.getItem(position); 
    layoutHandler.NAME.setText(dataProvider.getName()); 
    layoutHandler.LASTNAME.setText(dataProvider.getLastName()); 


    return row; 


}} 

DetailView.class:

public class DetailView extends AppCompatActivity { 

TextView entryName, entryLastName, entryPhone; 
String strName, strLast, strPhone; 
ImageView entryPhoto; 
Cursor cursor; 

private DataProvider dataProvider; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_detail_view); 





    //What code goes here ??? 



}} 
+0

Intent myIntent =新しいインテント(getBaseContext()、DetailView.class); startActivity(myIntent); 作品はありますか? 詳細アクティビティに転送されますか? –

+0

さて、おそらく2番目のクラスに '新しいUserDbHelper'を得ることから始めるべきでしょう。 StackOverflowはチュートリアルサイトではありません。問題にいくつかの試みを入れてください。また、パーセルブルオブジェクトを作成する方法を見てください。 –

+0

@ cricket_007ええ、それは完璧ではありませんが、フェッチメカニズムがうまくいきます。私は彼がすべての意図を通してデータを渡す必要があると思う! –

答えて

0

オーケー、私はそれを仮定します:

Intent myIntent = new Intent(getBaseContext(), DetailView.class); 
startActivity(myIntent); 

作品。

まだコードに紛失しているリンクがたくさんあります。まず、(名前、名字、電話番号)を取得していますが、どこに行くのですか?私はあなたがこのノートのようなものの名前を変更してくださいしなければならないので、上記のデータを使用して、リストを埋める何も表示されませんあなたのDataProviderContactへの私の意見でははるかに優れて:

1フィルとArrayList<Contact>をごwhileループのデータ

2-populate listViewにArrayListを入力してください。thisを参照してください。あなたのDisplayDataActivity

String phone =((TextView)view.findViewById(R.id.tv_phone)).getText().toString(); 

意図を介してデータを4パス:

のListView例えば

で選択した項目のデータを3-入手

Intent myIntent = new Intent(getBaseContext(), DetailView.class); 
intent.putExtra("phoneKey", phone); 
startActivity(myIntent); 

DetailView

Bundle bundle = getIntent().getExtras(); 
String phone = bundle.getString("phoneKey"); 

は、これが役立つことを願っています!

0

まず、できる限り生の種類を避ける必要があります。これらのオブジェクトが保持するクラスのタイプを指定できることを意味します。

public class ListDataAdapter extends ArrayAdapter<DataProvider> { 

次に、自分のリストオブジェクトをアダプタ内に格納しないでください。その行を削除してください。

は第二に、あなたはアダプタの異なるレイアウトを使用する予定がない場合は、私が代わりに

public ListDataAdapter(Context context) { 
    super(context, 0, new ArrayList<DataProvider>()); 
} 

public ListDataAdapter(Context context, ArrayList<DataProvider> data) { 
    super(context, 0, data); 
} 

これらのコンストラクタのいずれかまたは両方をお勧めしたいこれらのメソッドは、現在の変更を実装するために必要ではありません。 (ArrayAdapterスーパークラスは正しい値を取得します)。あなたがアイテムをクリックしたとき

@Override 
public void add(Object object) { 
    super.add(object); 
    list.add(object); 
} 

@Override 
public int getCount() { 
    return list.size(); 
} 

@Nullable 
@Override 
public Object getItem(int position) { 
    return list.get(position); 
} 

は今、あなたは

DataProvider clicked = listDataAdapter.getItem(position); 

限り、新しい活動にデータを渡すように、あなたは選択肢を持つことができますが、私はParcelableを投票します。シリアライズ可能な方法で動作するかどうかを確認するためにシリアライズ可能なものを試すこともできます。

アクティビティを開始するインテントにputExtraを入力すると、データを受け取るための別のアクティビティ(Parcelableオブジェクトの場合)にはgetIntent().getParcelableExtraが必要です。これらの方法はよく

あなたはおそらく他の側からそれを照会し、その後、SQLiteのからID値を渡すと周りの混乱でし

How to send an object from one Android Activity to another using Intents?

のように他の場所で文書化されていますが、あなただけがいない場合は、既に持っていることを行う必要がありますアダプタに格納されているDataProviderオブジェクト全体。

関連する問題