2017-12-12 13 views
0

私は、3つのフラグメントを含むビューページャを保持するメインアクティビティを持っています。各フラグメントには、カスタムアダプタによって作成されたリストビューがあります。私はここでは日付でソートする機能、名前と数量(リストビューショーフィールド)ヘルプが必要カスタムアダプタでリストビューを並べ替える

はここ

package com.bkbeesites.bkbeesalessheet; 

import android.content.Context; 
import android.content.Intent; 
import android.content.SharedPreferences; 
import android.database.Cursor; 
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteException; 
import android.preference.PreferenceManager; 
import android.support.design.widget.TabLayout; 
import android.support.design.widget.FloatingActionButton; 
import android.support.design.widget.Snackbar; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.widget.Toolbar; 

import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentManager; 
import android.support.v4.app.FragmentPagerAdapter; 
import android.support.v4.view.ViewPager; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.LayoutInflater; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.view.ViewGroup; 

import android.widget.TextView; 

import java.text.Collator; 
import java.util.ArrayList; 

public class MainActivity extends AppCompatActivity { 
    private SectionsPageAdapter mSectionsPageAdapter; 
    private ViewPager viewPager; 
    private String TAG = "MainActivity"; 
    public ArrayList<Customer> packageData; 
    Toolbar toolbar; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     toolbar = (Toolbar) findViewById(R.id.toolbar); 
     toolbar.setTitle("BK Bee Sales - Pending Sales"); 
     setSupportActionBar(toolbar); 
     mSectionsPageAdapter = new SectionsPageAdapter(getSupportFragmentManager()); 
     viewPager = (ViewPager) findViewById(R.id.container); 
     setupViewPager(viewPager); 
     TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs); 
     tabLayout.setupWithViewPager(viewPager); 
     SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this); 
     String dft = preferences.getString("default", ""); 
     if(!dft.equalsIgnoreCase("")) 
     { 
      if (dft.equals("package")){ 
       viewPager.setCurrentItem(0); 
      }else if (dft.equals("nuc")){ 
       viewPager.setCurrentItem(1); 
      }else if (dft.equals("queen")){ 
       viewPager.setCurrentItem(2); 
      } else { 
       viewPager.setCurrentItem(0); 
      } 
     } 

    } 

    public void showAddCustomer(View view){ 
     Intent intent = new Intent(this, AddCustomer.class); 
     startActivity(intent); 
    } 
    public void sortDate (View view){ 
     Tab1 tab1 = new Tab1(); 
     Tab2 tab2 = new Tab2(); 
     Tab3 tab3 = new Tab3(); 

     if (viewPager.getCurrentItem()==0){ 
      tab1.sortDate(); 
     } 
    } 

    private void setupViewPager(ViewPager viewPager){ 
     SectionsPageAdapter adapter = new SectionsPageAdapter(getSupportFragmentManager()); 
     adapter.addFragment(new Tab1(), "Packages"); 
     adapter.addFragment(new Tab2(), "Nucs"); 
     adapter.addFragment(new Tab3(), "Queens"); 
     viewPager.setAdapter(adapter); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.menu_main, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 

     //noinspection SimplifiableIfStatement 
     if (id == R.id.action_settings) { 
      Intent intent = new Intent(this, Preferences.class); 
      startActivity(intent); 
      return true; 
     } else if (id==R.id.action_viewList){ 
      Intent intent = new Intent(this,SalesRecord.class); 
      startActivity(intent); 
     } 

     return super.onOptionsItemSelected(item); 
    } 


} 

私の主な活動である必要があることは

package com.bkbeesites.bkbeesalessheet; 

import android.content.Context; 
import android.content.Intent; 
import android.content.SharedPreferences; 
import android.database.Cursor; 
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteException; 
import android.net.Uri; 
import android.os.Bundle; 
import android.preference.PreferenceManager; 
import android.support.v4.app.Fragment; 
import android.util.Log; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.AdapterView; 
import android.widget.ArrayAdapter; 
import android.widget.ListView; 
import android.widget.TextView; 

import java.text.Collator; 
import java.util.ArrayList; 
import java.util.Collections; 
import java.util.Comparator; 
import java.util.List; 


public class Tab1 extends Fragment { 
    private CustomerAdapter customerAdapter; 
    private static final String TAG = "fragment_tab1"; 
    private ListView tab1ListView; 
    private ArrayList<Customer> packageData = new ArrayList<>(); 
    TextView totalPackages; 
    TextView totalGross; 
    View rootView; 
    public Tab1() { 
     // Required empty public constructor 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     // Inflate the layout for this fragment 
     rootView = inflater.inflate(R.layout.fragment_tab1, container, false); 
     tab1ListView = (ListView) rootView.findViewById(R.id.tab1ListView); 
     totalPackages = (TextView)rootView.findViewById(R.id.totalPackages); 
     totalGross = (TextView)rootView.findViewById(R.id.totalGross); 
     return rootView; 


    } 
    @Override 
    public void onResume(){ 
     super.onResume(); 
     updatePackageList(); 

    } 
    public void updatePackageList() { 
     packageData.clear(); 
     tab1ListView.setAdapter(null); 
     int totalPackagesInt = 0; 
     try { 
      DatabaseHelper dbHelper = DatabaseHelper.getInstance(getActivity().getApplicationContext()); 
      SQLiteDatabase db = dbHelper.getReadableDatabase(); 

      Cursor c = db.rawQuery("SELECT * FROM packageCustomers", null); 
      if (c != null) { 
       if (c.moveToFirst()) { 
        while (!c.isAfterLast()){ 
         Customer cus = new Customer(); 
         cus.setDate(c.getString(c.getColumnIndex("date"))); 
         cus.setName(c.getString(c.getColumnIndex("name"))); 
         cus.setPhone(c.getString(c.getColumnIndex("phone"))); 
         cus.setEmail(c.getString(c.getColumnIndex("email"))); 
         cus.setQuantity(c.getInt(c.getColumnIndex("quantity"))); 
         cus.setNotes(c.getString(c.getColumnIndex("notes"))); 
         cus.setId(c.getInt(c.getColumnIndex("id"))); 
         packageData.add(cus); 
         totalPackagesInt = totalPackagesInt + cus.getQuantity(); 
         c.moveToNext(); 
        } 

       } 
      } 
      customerAdapter = new CustomerAdapter(this.getContext(), packageData); 
      tab1ListView.setAdapter(customerAdapter); 
      db.close(); 
      c.close(); 
      String totalPackagesText = totalPackagesInt + " Total Packages Reserved"; 
      totalPackages.setText(totalPackagesText); 
      packageMath(totalPackagesInt); 
      tab1ListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
       @Override 
       public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
        Customer cus = new Customer(); 
        cus = customerAdapter.getItem(position); 
        int sqlId = cus.getId(); 
        Intent intent = new Intent(getContext(), CustomerModel.class); 
        intent.putExtra("table", "packageCustomers"); 
        intent.putExtra("id", sqlId); 
        startActivity(intent); 
       } 
      }); 
     } catch (SQLiteException se) { 
      Log.e(getClass().getSimpleName(), "Could not create or Open the database"); 
     } 
    } 
    public void packageMath(int i){ 
     SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(rootView.getContext()); 
     String p = preferences.getString("packagePrice",""); 
     if(!p.equals("")) { 
      int price = Integer.parseInt(p); 
      int totalGrossInt = i * price; 
      String grossText = "Projected Earnings: $" + String.valueOf(totalGrossInt); 
      totalGross.setText(grossText); 
     } else { 
      totalGross.setText("Edit Price Preferences"); 
     } 
    } 
    public void sortDate(){ 
     Collections.sort(packageData); 
     tab1ListView.setAdapter(customerAdapter); 
     updatePackageList(); 
    } 


} 

はここ

私のTab1をクラスです私の顧客クラス

最後に、ここに私の顧客番号

package com.bkbeesites.bkbeesalessheet; 

import android.content.Context; 
import android.util.Log; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.BaseAdapter; 
import android.widget.TextView; 

import java.util.ArrayList; 

/** 
* Created by Brett on 12/6/2017. 
*/ 

public class CustomerAdapter extends BaseAdapter { 
    private Context mContext; 
    private LayoutInflater mInflater; 
    private ArrayList<Customer> mDataSource; 


    public CustomerAdapter(Context context, ArrayList<Customer> items) { 
     super(); 
     mContext = context; 
     mDataSource = items; 
     mInflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

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

    //2 
    @Override 
    public Customer getItem(int position) { 
     return mDataSource.get(position); 
    } 

    //3 
    @Override 
    public long getItemId(int position) { 
     return position; 
    } 

    //4 
    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     // Get view for row item 
     View rowView = mInflater.inflate(R.layout.list_item, parent, false); 
     // Get title element 
     TextView nameTextView = 
       (TextView) rowView.findViewById(R.id.nameTextView); 
     TextView quantityTextView = 
       (TextView) rowView.findViewById(R.id.quantityTextView); 
     TextView dateTextView = 
       (TextView) rowView.findViewById(R.id.dateTextView); 
     Customer cus = mDataSource.get(position); 
     nameTextView.setText(cus.getName()); 
     quantityTextView.setText(String.valueOf(cus.getQuantity())); 
     dateTextView.setText(cus.getDate()); 
     return rowView; 
    } 
} 

申し訳ありませんが、不必要なコードがたくさんありましたが、私は初心者であり、あなたが見たいと思っていたことを知りませんでした。

Column Title Textview "Order Date"をクリックするとCollections.sortを呼び出そうとしています。顧客オブジェクトを含むデータは、SQLiteデータベースに格納されます(適切かどうかはわかりません)。

答えて

0

アダプタクラスには次のようなメソッドを記述する必要があります。

public void sort(){ 
    Collections.sort(list, new Comparator<Customer>() { 
     @Override 
     public int compare(Customer o1, Customer o2) { 
      return o1.compareTo(o2); 
     } 
    }); 
    notifyDataSetChanged(); 
} 

コンパイル時にコンパレータを作成したくない場合は、コンパレータの変数を作成できます。

private Comparator comp = new Comparator<Customer>() { 
     @Override 
     public int compare(Customer o1, Customer o2) { 
      return o1.compareTo(o2); 
     } 
    }); 

この場合、次のようなソート方法を変更する必要があります。

public void sort(){ 
    Collections.sort(list, comp); 
    notifyDataSetChanged(); 
} 

あなたのアクティビティクラスでソートしたい時はいつでもあなたはそれがあなたのリストをソートし、リストビューを更新します。このソートメソッドを呼び出す必要があります。 は、あなたの活動のクラスでは、あなたが他の分野に応じて比較したい場合にも

adapter.sort(); 

以下のようなメソッドを呼び出す必要があります。変数を次のように作成できます。

private int sortType;

パラメータをアダプタクラスに渡す必要があります。

public void sort(int sortType){ 
    this.sortType = sortType; 
    Collections.sort(list, comp); 
    notifyDataSetChanged(); 
} 

とありがとう

private Comparator comp = new Comparator<Customer>() { 
     @Override 
     public int compare(Customer o1, Customer o2) { 
      switch(sortType){ 
       case 0: //By Name 
        return o1.getName().compareTo(o2.getName); 
        break; 
       case 1: 
        return o1.getQuantitiy() - o2.getQuantitiy(); 
        break; 
       case 2: 
        return o1.compareTo(o2); 
        break; 
       default: 
        return 0; 
      } 
     } 
    }); 
+0

次のようにコンパレータのフィールドを変更します。私は、アクティビティのボタンからフラグメントのリストビューを更新する際に問題があり、その方法が間違っていることを知ったので、設定ダイアログでソートタイプセレクタを設定しました。それ以外の場合は、並べ替えが機能しています。ありがとう、非常に、Ergin。 –

+0

私の答えはあなたを助けましたか? –

+0

私の答えがあなたのために正しければ答えとしてそれを受け入れてください。それ以外の場合は、コメントとして詳細情報を追加してください。 –

関連する問題