2017-10-27 2 views
0

Ist es möglich, etwas wie ein NumberPicker Widget in Android zu erstellen, aber mit einer Reihe von Strings aus einer SQLite-Datenbank gefüllt?Verwenden von NumberPicker in Android, aber mit Strings von SQlite

Wenn es nur einen Eintrag gibt, dann würde der Spinner eine Zeichenfolge haben, wenn es hundert gibt, dann wären es hundert Einträge. Es kann nicht weniger als einen Eintrag pro Design geben, da die Aktivität nicht ohne mindestens einen Eintrag eingegeben werden kann. Es gibt keine Obergrenze für die Obergrenze, aber die Daten werden nach Datum gefüllt, und es ist SEHR unwahrscheinlich, dass diese Datenmenge je nach Art der Datenerstellung mehr als tausend Einträge umfasst.

Was ich versuche zu tun ist, zeigen Daten in einer SQLite-Datenbank gespeichert, der Name jedes Datensatzes würde in der NumberPicker angezeigt werden, dann könnte der Benutzer schnell durch die Daten scrollen. Die Daten werden dann in einem Balkendiagramm (MPandroidcharts-Bibliothek) angezeigt, wenn sie an dem Dataset im NumberPicker vorbeirollen. Zumindest ist das das Ziel.

Ich habe die SQLite-Datenbank verwaltet, und ich habe die Diagramme für einzelne Datensätze arbeiten, ich kann einfach nicht herausfinden, wie die Datenauswahl Seite funktioniert.

+0

würde ich Bild ein „Datapicker“ Widget, wie Sie Ich habe beschrieben, dass es ein Albtraum wäre, wenn Sie mehr als 50 Einträge haben - ganz zu schweigen von den Speicheranforderungen für alles, was in der Nähe von 1000 Einträgen liegt. Erwägen Sie die Verwendung einer 'RecyclerView' (möglicherweise in Kombination mit einer' EditText'-Ansicht, um die Suche in den Einträgen zu erleichtern). – Barns

+0

@diesel Haben Sie gedacht, dass ein Array oder eine HashMap eine Komponente auffüllen, die Daten enthält und durch eine Art Mini-Listenansicht mit den Datennummern aus einer DB-Tabelle – Grendel

+0

@ Barns52 scrollt, habe ich parallel in die RecylcerView hineingeschaut mein aktueller Plan. Die Art und Weise, wie ich das vorhatte, schien bei meinen ersten Skizzen einfacher zu sein, aber es sieht wie eine ExpandableListView mit RecyclerView aus. Jeder der Einträge wird chronologisch sein, daher denke ich, dass eine Suchfunktion (noch) nicht benötigt wird. Definitiv eine Möglichkeit in einem zukünftigen Upgrade durch – Diesel

Antwort

1

diesen Code Versuchen Sie, dies ist nur eine Liste Aktivität, die von einem Recycler Adapter die XML für die Liste Aktivität und die XML-Kartenlayout-Datei

enthalten gesichert ist
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> 
+0

Das sieht so aus, als ob es sein könnte, was ich tun sollte, aber ich habe ein paar Probleme. Es gibt ein gutes Stück hier, dass ich nicht ganz verstehe und ich denke, dass unsere Datenbanken sehr unterschiedlich aufgebaut sind, so dass die Anpassung mehr als nur ein bisschen schwierig ist. Könnten Sie ein bisschen mehr Informationen erklären oder vielleicht Ihr db-Modell? – Diesel

+0

Wenn es hilfreicher wäre, könnte ich auch mein vollständiges Projekt posten Ich arbeite an – Diesel

+0

@Diesel Meine DB Model Klasse ist eher generisch, es hat nur Getter und Setter für die Dateneingabe und Daten lesen Felder bis hin zu den DB-Tabellen sehr einfach – Grendel

Verwandte Themen