2016-09-08 12 views
0

これは1週間ほど私を悩ませていますが、まだ回答が見つかりませんでした。
基本的に私はMainActivityを持っています。このMainActivityには、メインコードとリストビューで動作するフラグメントが含まれています。チェックボックス(ListView)の値をデータベースに挿入してください

MainActivity.java

public class MainActivity extends AppCompatActivity { 

private Handler handler = new Handler(); 
private Toolbar toolbar; 
private TabLayout tabLayout; 
private ViewPager viewPager; 
private Button bNext; 

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

    toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 

    getSupportActionBar().setDisplayHomeAsUpEnabled(false); 

    viewPager = (ViewPager) findViewById(R.id.viewpager); 
    setupViewPager(viewPager); 

    tabLayout = (TabLayout) findViewById(R.id.tabs); 
    tabLayout.setupWithViewPager(viewPager); 
} 

private void setupViewPager(ViewPager viewPager) { 
    ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager()); 
    adapter.addFragment(new RoomServer(), "Room Server"); 
    viewPager.setAdapter(adapter); 
} 

class ViewPagerAdapter extends FragmentPagerAdapter { 
    private final List<Fragment> mFragmentList = new ArrayList<>(); 
    private final List<String> mFragmentTitleList = new ArrayList<>(); 

    public ViewPagerAdapter(FragmentManager manager) { 
     super(manager); 
    } 

    @Override 
    public Fragment getItem(int position) { 
     return mFragmentList.get(position); 
    } 

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

    public void addFragment(Fragment fragment, String title) { 
     mFragmentList.add(fragment); 
     mFragmentTitleList.add(title); 
    } 

    @Override 
    public CharSequence getPageTitle(int position) { 
     return mFragmentTitleList.get(position); 
    } 
} 

    } 

RoomServer.java

public class RoomServer extends ListFragment implements OnItemClickListener{ 
    public RoomServer() { 
     // Required empty public constructor 
    } 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container,  Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.fragment_rs, container, false); 
     return view; 
    } 

    @Override 
    public void onActivityCreated(Bundle savedInstanceState) { 
     super.onActivityCreated(savedInstanceState); 
     getListView().setChoiceMode(getListView().CHOICE_MODE_MULTIPLE); 
     getListView().setTextFilterEnabled(true); 
     ArrayAdapter adapter = ArrayAdapter.createFromResource(getActivity(), R.array.rs_list, android.R.layout.simple_list_item_checked); 
     setListAdapter(adapter); 
     getListView().setOnItemClickListener(this); 
    } 

    @Override 
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
     Toast.makeText(getActivity(), "Item: " + position, Toast.LENGTH_SHORT).show(); 
    } 
} 

Fragment_rs.xml

<?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:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context=".fragments.RoomServer"> 

    <ListView 
     android:id="@android:id/list" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" > 
    </ListView> 

    <TextView 
     android:id="@android:id/empty" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" > 
    </TextView> 

    <Button 
     android:id="@+id/bNext_rs" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="@string/next" 
     android:layout_marginRight="39dp" 
     android:layout_marginEnd="39dp" 
     android:layout_marginBottom="60dp" 
     android:layout_alignParentBottom="true" 
     android:layout_alignParentRight="true" 
     android:layout_alignParentEnd="true" /> 

</RelativeLayout> 

activity_main.xml

<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <android.support.design.widget.AppBarLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"> 

     <android.support.v7.widget.Toolbar 
      android:id="@+id/toolbar" 
      android:layout_width="match_parent" 
      android:layout_height="?attr/actionBarSize" 
      android:background="?attr/colorPrimary" 
      app:layout_scrollFlags="scroll|enterAlways" 
      app:popupTheme="@style/ThemeOverlay.AppCompat.Light" > 
     </android.support.v7.widget.Toolbar> 

     <android.support.design.widget.TabLayout 
      android:id="@+id/tabs" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      app:tabMode="scrollable" 
      app:tabGravity="fill"/> 
    </android.support.design.widget.AppBarLayout> 

    <android.support.v4.view.ViewPager 
     android:id="@+id/viewpager" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     app:layout_behavior="@string/appbar_scrolling_view_behavior" /> 
</android.support.design.widget.CoordinatorLayout> 

uは私がリストビューのチェックボックスを作成するためにCHOICE_MODE_MULTIPLEを使用している見ることができるようにのstrings.xml

内で宣言リストビューrのアイテム。そして今、私はこのチェックボックスの価値を得る方法についていません。私は、ボタンをクリックしてVolleyを使用してデータベースに価値を送ることを計画しています。私が見た答えのほとんどは、isCheckedを使用していましたが、実際には配列アダプタに実装する方法はわかりません。

+0

あなたはくぼみischeckdに理解して何? –

答えて

0

次のいずれかのカスタム配列を自分でアダプタ、または選択されたアイテムのインデックスのSparseBooleanArrayを取得するためにListViewクラスでthisメソッドを使用して実装できます。

//Submit button example 
submitButton.setOnClickListener(new View.OnClickListener() { 
    public void onClick(View v) { 
     //Get base list 
     String[] items = getActivity().getResources().getStringArray(R.array.rs_list); 

     //Get selected items & set intent args 
     SparseBooleanArray selectedItems = getListView().getCheckedItemPositions(); 
     ArrayList<String> argList = new ArrayList<>(); 
     for (int i = 0; i < selectedItems.size(); i++) { 
      argList.add(items[selectedItems.keyAt(i)]); 
     } 

     //Start activity 
     Intent intent = new Intent(); 
     intent.putStringArrayListExtra("SelectedItems", argList); 
     getActivity().startActivity(intent); 
    } 
}); 
+0

このコードは、フラグメント内のButtonで機能しますか? – DonDon

+0

ええ、私は、ボタンをクリック事象を受け取ってデータベースのチェックされた項目を更新する一般的な例として追加しました。この例では新しいアクティビティを開始しますが、代わりに 'argList'からアイテムを取り出してデータベースを更新することもできます。 – ajplumlee33

関連する問題