0

Is it possible to create something like a NumberPicker Widget in android but populate it with a series of strings pulled from an SQLite database?

If there's only one entry, then the spinner would have one string, if there is a hundred, then there would be a hundred entries. There cannot be less than one entry by design, as in, the activity can't be entered without at least one entry. There is no hardset upper limit, but the data will be populated by date and it is VERY unlikely that this data set would ever exceed a thousand entries due to the nature of how the data is created.

What I'm trying to do is show data saved in an SQLite database, the name of each dataset would be displayed in the NumberPicker, then the user could quickly scroll through the data. The data is then going to be be displayed in a Bar Chart (MPandroidcharts library), as they scroll past the dataset in the NumberPicker. At least, that's the goal.

I've managed the SQLite database, and I've got the charts working for single datasets, I just can't figure out how to get the data selection side working.

4

1 回答 1

1

试试这个代码,这只是一个由回收适配器支持的列表活动,包括列表活动的 XML 和卡片布局 XML 文件

   public class ListActivity extends AppCompatActivity {

   DBHelper helper;
  static List<DBModel>dbList;
   RecyclerView mRecyclerView;
   private static RecyclerView.Adapter mAdapter;
    private RecyclerView.LayoutManager mLayoutManager;

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

    addListenerOnButtonAdd();
    TextView tvNoData = (TextView)findViewById(R.id.tvNoData);

    setTitle("");// This sets the title of the toolbar
    Toolbar topToolBar = (Toolbar)findViewById(R.id.toolbar);
    setSupportActionBar(topToolBar);
    //topToolBar.setLogo(R.drawable.keyss);// See Notes in MainActivity

    setRequestedOrientation( ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);


    helper = new DBHelper(this);
    dbList = new ArrayList<>();
    dbList = helper.getDataFromDB();

    mRecyclerView = (RecyclerView)findViewById(R.id.recycleview);
    mRecyclerView.setHasFixedSize(true);

    // use a linear layout manager
    mLayoutManager = new LinearLayoutManager(this);
    mRecyclerView.setLayoutManager(mLayoutManager);

    // Code below defines the adapter
    mAdapter = new RecyclerAdapter(this,dbList);
    mRecyclerView.setAdapter(mAdapter);

    int sz = dbList.size();
    if(sz == 0){
        tvNoData.setVisibility(View.VISIBLE);
        tvNoData.setText("No Data");
    }
  }

  // This method is called from DetailsActivity and notifies Recycler View 
  that the DB was changed

   of DB and Recycler View
   public static void removeListRow(int position) {
    dbList.remove(position);
    mAdapter.notifyItemRemoved(position);
    mAdapter.notifyItemRangeChanged(position, dbList.size());
   }

    /* this BUTTON is on the ToolBar click to ADD new record */
    private void addListenerOnButtonAdd() {
    // Navigate to DetailsActivity to ADD new DATA
    Toolbar tb = (Toolbar) findViewById( R.id.toolbar );
    setSupportActionBar( tb );

    tb.findViewById( R.id.btnAdd ).setOnClickListener( new 
    View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intentSP = new Intent(ListActivity.this, 
   DetailsActivity.class );
            Bundle extras = new Bundle();
            extras.putString("FROM_LIST_ACTIVITY","true" );
            intentSP.putExtras(extras);
            startActivity( intentSP );
        }
    } );
 }

public void onBackPressed(){
    Intent intent = new Intent( ListActivity.this, MainActivity.class );
    startActivity( intent );
 }
 }


   <?xml version="1.0" encoding="utf-8"?>
  <LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:tools="http://schemas.android.com/tools"
   android:id="@+id/activity_list"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
  android:background="@color/color_lightGray"
   android:orientation="vertical"
   tools:context="com.searchdb.ListActivity">

    <android.support.v7.widget.Toolbar
    android:id="@+id/toolbar"
    android:minHeight="?attr/actionBarSize"
    android:background="@color/color_darkGray"
    android:layout_width="match_parent"
    android:layout_height="64dp">

    <ImageView
        android:id="@+id/imageTB"
        android:layout_width="70dp"
        android:layout_height="wrap_content"
        android:paddingBottom="2dp"
        android:paddingLeft="2dp"
        android:paddingRight="2dp"
        android:paddingTop="4dp"
        android:src="@drawable/keyss" />

    <TextView
        android:text="@string/list_view"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/toolbar"
        android:layout_alignParentStart="true"
        android:layout_marginStart="30dp"
        android:layout_marginBottom="20dp"
        android:id="@+id/tvLA"
        android:textStyle="bold"
        android:textColor="@color/color_White"
        android:textSize="22sp" />

    <Button
        android:text="@string/add"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/btnAdd"
        android:layout_marginLeft="100dp"
        android:textSize="18sp"
        android:textStyle="bold"
        android:focusable="false"
        android:textColor="@color/color_White"
        android:background="@color/color_Transparent"/>

  </android.support.v7.widget.Toolbar>

  <LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal">

    <android.support.v7.widget.RecyclerView
        android:id="@+id/recycleview"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

</LinearLayout>

<LinearLayout
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:text="TextView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/tvNoData"
        android:gravity="center"
        android:layout_marginTop="240dp"
        android:visibility="invisible"
        android:textAllCaps="true"
        android:textStyle="bold"
        android:textSize="30sp"
        android:textColor="@color/color_Red" />
 </LinearLayout>

  </LinearLayout>

  public class RecyclerAdapter extends 
  RecyclerView.Adapter<RecyclerAdapter.ViewHolder> {

  static List<DBModel> dbList;
  static private Context context;
   int sz;

   RecyclerAdapter(Context context, List<DBModel> dbList) {

    RecyclerAdapter.dbList = new ArrayList<>();
    RecyclerAdapter.context = context;
    RecyclerAdapter.dbList = dbList;
 }

 @Override
 public RecyclerAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int 
 viewType) {

    View itemLayoutView = 
 LayoutInflater.from(parent.getContext()).inflate(R.layout.item_row, null);
    // create ViewHolder
    ViewHolder viewHolder = new ViewHolder(itemLayoutView);

    return viewHolder;
}

@Override
public void onBindViewHolder(RecyclerAdapter.ViewHolder holder, int 
 position) {
    holder.rowid.setText(String.valueOf(dbList.get(position).getRowid()));
    holder.station.setText(dbList.get(position).getStation_Name());
    System.out.println("RecyclerAdapter BindViewHolder FIRST position 
 "+position);
}

 @Override
 public int getItemCount() {
    return dbList.size();
 }

 public class ViewHolder extends RecyclerView.ViewHolder implements 
 View.OnClickListener {

    public TextView station, rowid;

    public ViewHolder(View itemLayoutView) {
        super(itemLayoutView);

        rowid = (TextView) itemLayoutView.findViewById(R.id.rvROWID);
        station = (TextView) itemLayoutView.findViewById(R.id.rvSTATION);
        // Attach a click listener to the entire row view
        itemLayoutView.setOnClickListener(this);

    }

   @Override 
    public void onClick(View v) {

       Intent intentN = new Intent(context, DetailsActivity.class);
       Bundle extras = new Bundle();
       extras.putInt("POSITION", getAdapterPosition());
       extras.putString("FROM_LIST_ACTIVITY", "false");
       intentN.putExtras(extras);
       context.startActivity(intentN);
   }
   }
   }

  <?xml version="1.0" encoding="utf-8"?>
 <android.support.v7.widget.CardView 
  xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:card_view="http://schemas.android.com/apk/res-auto"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:layout_margin="5dp"
  android:orientation="horizontal"
  card_view:cardCornerRadius="5dp"
  card_view:cardUseCompatPadding="true">

   <RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/color_White">

    <TextView
        android:id="@+id/rvROWID"
        android:layout_width="wrap_content"
        android:layout_height="50dp"
        android:gravity="left|center_vertical"
        android:padding="10dp"
        android:textAlignment="center"
        android:text="Position ID"
        android:textColor="@color/color_Black"
        android:layout_marginLeft="10dp"
        android:textStyle="bold"
        android:textSize="16sp"/>

    <TextView
        android:id="@+id/rvSTATION"
        android:layout_width="fill_parent"
        android:layout_height="50dp"
        android:padding="10dp"
        android:gravity="right|center_vertical"
        android:text="Station"
        android:layout_marginLeft="10dp"
        android:textStyle="bold"
        android:textSize="16sp"
        android:textColor="@color/color_Black" />

   </RelativeLayout>

  </android.support.v7.widget.CardView>
于 2017-10-30T05:43:44.837 回答