2016-04-19 10 views
0

いつもご利用いただきありがとうございます...ダイナミックリストビューのクリックリスナーに設定

私はデータベースにある情報を使ってリストビューを作成することができました。

ここでは、項目が異なるページに移動するようにsetOnClickListenerを設定します。現在、私は "switch(position)"コンストラクトを使用していますが、リストビュー上のアイテム数をハードコードできないため、適切に機能しません。

私は親切にこの1つを手伝ってください。

パブリッククラスSurveyActivityは、ユーザーがリストビューに表示されます複数のアンケートを作成できるようになるAppCompatActivity {

ArrayList<String> list = new ArrayList<String>(); 
SQLiteDatabase db; 
DatabaseHelper helper = new DatabaseHelper(this); 

String listItem = ""; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_survey); 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 

    final FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
    fab.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      Snackbar.make(view, "Add new survey", Snackbar.LENGTH_LONG) 
        .setAction("Action", null).show(); 

      PopupMenu pop = new PopupMenu(SurveyActivity.this, fab); 
      pop.getMenuInflater().inflate(R.menu.addsurvey_menu, pop.getMenu()); 
      pop.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { 

       public boolean onMenuItemClick(MenuItem item) { 

        Toast.makeText(getApplicationContext(), "Your choice is to " + item.getTitle().toString().toUpperCase() + " a survey form", Toast.LENGTH_LONG).show(); 

        switch (item.getItemId()) { 

         case R.id.c: 
          //Takes admin to page where survey is created 

          Intent i = new Intent(getApplicationContext(), CreateSurvey.class); 
          startActivity(i); 

         case R.id.d: 
          //gets ready created XML forms from server 

         case R.id.r: 
          //refreshes and updates survey list from db 

        } 

        return true; 
       } 
      }); 

      pop.show(); 

     } 
    }); 

    db = helper.getReadableDatabase(); 

    //Cursor crs = db.rawQuery("SELECT * FROM tbNames", null); 
    Cursor crs=db.query("tbNames",new String[]{ "names"},null,null,null,null,null); 

    if(crs.moveToFirst()){ 
     do { 
      listItem =crs.getString(0); 
      list.add(listItem); 

     }while(crs.moveToNext()); 
    } 

    ListView surveyList = (ListView) findViewById(R.id.surveylist); 

    ArrayAdapter<String> aAdapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, list); 
    surveyList.setAdapter(aAdapter); 
    registerForContextMenu(surveyList); 

    surveyList.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 

      switch (position) { 

       case 0: 
        Intent i = new Intent(getApplicationContext(), hivActivity.class); 
        startActivity(i); 
        break; 
       case 1: 
        Intent intent = new Intent(SurveyActivity.this, CreatedSurveyActivity.class); 
        startActivity(intent); 
      } 
     } 
    }); 

} 

}

マイアプリを拡張します。

問題は、項目のリスナーを動的に設定する方法です。あなたのコードが参考になる投稿

+0

あなたのコードを投稿してください。 –

+0

全体のコードを投稿 –

+0

カスタムArrayAdapterを作成し、onClickListenerをconvertViewsに設定しようとしましたか?たぶん、getItemViewType(int position)メソッドをオーバーライドして、リストビューの子に対して異なるビュータイプを宣言することもできます。これを使用して、クリックイベントを決定することができます。それは堅実な解決策でなければなりません。 – Jeffalee

答えて

0

あなたはまずアイテムがhivActivityを呼び出しますし、他のすべての項目がCreatedSurveyActivityを呼び出します

surveyList.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
    @Override 
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 

     if (position == 0) { 
      Intent i = new Intent(getApplicationContext(), hivActivity.class); 
      startActivity(i); 
     } else { 
      Intent intent = new Intent(SurveyActivity.this, CreatedSurveyActivity.class); 
      startActivity(intent); 
     } 
    } 
}); 

このコードを試すことができます。 CreatedSurveyActivityに何かを渡す必要がある場合は、このように入力してください。intent.putExtra("position" position);

+0

ありがとう、これは動作します...私はそれを考えたことはありません。どのように恥ずかしい。また、私は他のケースを置き換えるために私のスイッチにデフォルトを追加し、それも働いた – SilentG

0

たぶんシートン項目 ClickListenerを(使用)

0

は、しかし、多くの場合、同様の状況で助けることができるアプローチがある:各ビュー上のタグを設定し

  1. 、などあなたはそれを生成する。たとえば、アイテムID、または単なるインクリメンタです。
  2. onClickListenerはビューをパラメータとして受け取ります。それからタグを検索することができます。
  3. このタグは、ページ名、ページURL、またはロードしようとしているその他の情報と照合することができます。
+0

どうすればいいか教えてください。例があれば十分です。 – SilentG

関連する問題