Android 如何在ListView下显示另一个布局
我有一个db数据列表,它扩展了Android 如何在ListView下显示另一个布局,android,listview,android-fragments,android-recyclerview,android-listview,Android,Listview,Android Fragments,Android Recyclerview,Android Listview,我有一个db数据列表,它扩展了SQLiteOpenHelper。 我可以读取数据,我可以保存新数据,但问题是我想在列表视图下面显示另一个名为clear\u history的布局,所以我要做的是在列表下面显示ListView和TextView。 我试图创建一个RecyclerView适配器,但未能实现。 因为我想有一个文本视图,我可以用它来点击监听器并删除数据库列表。 下面是我想要的列表中的照片。 第一张照片是真实的设计。 第二张照片是我想要的 这是我的密码 DatabaseHelper.cl
SQLiteOpenHelper
。
我可以读取数据,我可以保存新数据,但问题是我想在列表视图
下面显示另一个名为clear\u history
的布局,所以我要做的是在列表下面显示ListView
和TextView
。
我试图创建一个RecyclerView适配器
,但未能实现。
因为我想有一个文本视图,我可以用它来点击监听器并删除数据库列表。
下面是我想要的列表中的照片。
第一张照片是真实的设计。
第二张照片是我想要的
这是我的密码
DatabaseHelper.class
public class DatabaseHelper extends SQLiteOpenHelper {
private static final String TABLE_NAME = "people_table";
private static final String COL1 = "ID";
private static final String COL2 = "name";
public DatabaseHelper(Context context) {
super(context, TABLE_NAME, null, 1);
}
@Override
public void onCreate(SQLiteDatabase db) {
String createTable = "CREATE TABLE " + TABLE_NAME + " (ID INTEGER PRIMARY KEY AUTOINCREMENT, " +
COL2 +" TEXT)";
db.execSQL(createTable);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP IF TABLE EXISTS " + TABLE_NAME);
onCreate(db);
}
public boolean addData(String item) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put(COL2, item);
long result = db.insert(TABLE_NAME, null, contentValues);
//if date as inserted incorrectly it will return -1
if (result == -1) {
return false;
} else {
return true;
}
}
public Cursor getData(){
SQLiteDatabase db = this.getWritableDatabase();
String query = "SELECT * FROM " + TABLE_NAME;
Cursor data = db.rawQuery(query, null);
return data;
}
public Cursor getItemID(String name){
SQLiteDatabase db = this.getWritableDatabase();
String query = "SELECT " + COL1 + " FROM " + TABLE_NAME +
" WHERE " + COL2 + " = '" + name + "'";
Cursor data = db.rawQuery(query, null);
return data;
}
public void updateName(String newName, int id, String oldName){
SQLiteDatabase db = this.getWritableDatabase();
String query = "UPDATE " + TABLE_NAME + " SET " + COL2 +
" = '" + newName + "' WHERE " + COL1 + " = '" + id + "'" +
" AND " + COL2 + " = '" + oldName + "'";
db.execSQL(query);
}
public void deleteName(int id, String name){
SQLiteDatabase db = this.getWritableDatabase();
String query = "DELETE FROM " + TABLE_NAME + " WHERE "
+ COL1 + " = '" + id + "'" +
" AND " + COL2 + " = '" + name + "'";
db.execSQL(query);
}
}
FragmentHistory.XML
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="fill_parent"
xmlns:android="http://schemas.android.com/apk/res/android">
<ListView android:id="@+id/lvHistory" android:longClickable="true"
android:layout_width="match_parent" android:layout_height="match_parent"
android:listSelector="@android:color/transparent" android:soundEffectsEnabled="false"
android:overScrollMode="never" />
<LinearLayout android:gravity="center" android:orientation="vertical"
android:id="@+id/linLayoutEmptyList" android:paddingBottom="32.0dip" android:visibility="gone"
android:layout_width="fill_parent" android:layout_height="fill_parent">
<ImageView android:layout_gravity="center" android:id="@+id/ivHistoryPage"
android:layout_width="@dimen/history_query_empty"
android:layout_height="@dimen/history_query_empty"
android:layout_marginBottom="@dimen/history_query_empty_margin"
android:src="@drawable/ic_history" />
<TextView android:textSize="20.0sp" android:textColor="@color/blue_title"
android:gravity="center" android:layout_gravity="center" android:id="@+id/tvHistoryPage"
android:layout_width="fill_parent" android:layout_height="wrap_content"
android:text="@string/SVEmptyHistoryTableMessage" android:lineSpacingExtra="2.0sp" />
</LinearLayout>
</LinearLayout>
<TextView
android:id="@+id/btnClearSearch"
android:textSize="15sp"
android:textColor="@android:color/black"
android:background="@drawable/selector_btn_home"
android:paddingLeft="@dimen/history_left_padding"
android:paddingTop="8dp"
android:paddingBottom="8dp"
android:layout_width="fill_parent"
xmlns:android="http://schemas.android.com/apk/res/android"
android:text="@string/SVSRClearHistoryCellTitle"
android:layout_height="fill_parent">
</TextView>
history_item.XML
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:background="@drawable/selector_btn_home"
android:id="@+id/historyLayout"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<ImageView android:id="@id/ivHistory" style="@style/ivHistory" />
<TextView android:id="@+id/historyName" android:layout_height="38dp" style="@style/TextViewQuery"/>
<ImageView android:id="@+id/imgViewSetQuery" style="@style/ImageViewSetQuery" />
<TextView android:textSize="@dimen/search_font" android:textColor="@android:color/white"
android:gravity="center" android:id="@+id/btnDeleteHistory" android:background="@color/red" android:paddingLeft="5.0dip"
android:paddingRight="5.0dip" android:visibility="gone" android:longClickable="false"
android:layout_width="wrap_content" android:layout_height="fill_parent" android:text="@string/Delete" />
</LinearLayout>
历史课
public class FragmentHistory extends Fragment {
View paramView;
public TextView textView, showDeleteButton, noSearch;
public ImageView showHistoryQuery;
DatabaseHelper mDatabaseHelper;
private ListView mListView;
private LinearLayout noQueries;
ListAdapter listAdapter;
private final Handler handler = new Handler();
public FragmentHistory() {
}
private boolean switchOnOff;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
paramView = inflater.inflate(R.layout.fragment_history, container, false);
textView = paramView.findViewById(R.id.historyName);
noSearch = paramView.findViewById(R.id.tvHistoryPage);
mListView = paramView.findViewById(R.id.lvHistory);
noQueries = paramView.findViewById(R.id.linLayoutEmptyList);
noSearch.setTextColor(Color.GRAY);
mDatabaseHelper = new DatabaseHelper(getActivity());
doTheAutoRefresh();
populateListView();
((MainActivity)getActivity()).setFragmentRefreshListener(new MainActivity.FragmentRefreshListener() {
@Override
public void onRefresh() {
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.detach(FragmentHistory.this).attach(FragmentHistory.this).commit();
}
});
return paramView;
}
private void doTheAutoRefresh() {
handler.postDelayed(new Runnable() {
@Override
public void run() {
updateView(); // this is where you put your refresh code
doTheAutoRefresh();
}
}, 1000);
}
private void populateListView() {
//get the data and append to a list
Cursor data = mDatabaseHelper.getData();
ArrayList<String> listData = new ArrayList<>();
while (data.moveToNext()) {
listData.add(data.getString(1));
}
if (data.getCount() != 0) {
ListAdapter adapter = new ArrayAdapter<String>(getActivity(), R.layout.history_item, R.id.historyName, listData);
mListView.setAdapter(adapter);
} else {
mListView.setVisibility(View.GONE);
noQueries.setVisibility(View.VISIBLE);
}
}
公共类碎片历史扩展碎片{
视图参数视图;
公共文本视图文本视图,ShowDelete按钮,noSearch;
公共图像视图显示历史查询;
数据库助手mDatabaseHelper;
私有列表视图;
私人线路布局查询;
列表适配器列表适配器;
私有最终处理程序=新处理程序();
公共碎片历史(){
}
私有布尔开关关断;
@可空
@凌驾
创建视图时的公共视图(@NonNull LayoutInflater inflater、@Nullable ViewGroup container、@Nullable Bundle savedInstanceState){
paramView=充气机。充气(R.layout.fragment_历史,容器,错误);
textView=paramView.findViewById(R.id.historyName);
noSearch=paramView.findViewById(R.id.tvHistoryPage);
mListView=paramView.findViewById(R.id.lvHistory);
noquerys=paramView.findViewById(R.id.linLayoutEmptyList);
鼻弓。setTextColor(颜色。灰色);
mDatabaseHelper=newdatabasehelper(getActivity());
doTheAutoRefresh();
populateListView();
((MainActivity)getActivity()).setFragmentRefreshListener(新建MainActivity.FragmentRefreshListener()){
@凌驾
公共void onRefresh(){
FragmentTransaction ft=getFragmentManager().beginTransaction();
ft.detach(FragmentHistory.this).attach(FragmentHistory.this.commit();
}
});
返回参数视图;
}
私有void doTheAutoRefresh(){
handler.postDelayed(新的Runnable(){
@凌驾
公开募捐{
updateView();//这是放置刷新代码的地方
doTheAutoRefresh();
}
}, 1000);
}
私有void populateListView(){
//获取数据并附加到列表中
游标数据=mDatabaseHelper.getData();
ArrayList listData=新的ArrayList();
while(data.moveToNext()){
add(data.getString(1));
}
如果(data.getCount()!=0){
ListAdapter=new ArrayAdapter(getActivity(),R.layout.history_项,R.id.historyName,listData);
mListView.setAdapter(适配器);
}否则{
mListView.setVisibility(View.GONE);
noquerys.setVisibility(View.VISIBLE);
}
}
clear_history.XML
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="fill_parent"
xmlns:android="http://schemas.android.com/apk/res/android">
<ListView android:id="@+id/lvHistory" android:longClickable="true"
android:layout_width="match_parent" android:layout_height="match_parent"
android:listSelector="@android:color/transparent" android:soundEffectsEnabled="false"
android:overScrollMode="never" />
<LinearLayout android:gravity="center" android:orientation="vertical"
android:id="@+id/linLayoutEmptyList" android:paddingBottom="32.0dip" android:visibility="gone"
android:layout_width="fill_parent" android:layout_height="fill_parent">
<ImageView android:layout_gravity="center" android:id="@+id/ivHistoryPage"
android:layout_width="@dimen/history_query_empty"
android:layout_height="@dimen/history_query_empty"
android:layout_marginBottom="@dimen/history_query_empty_margin"
android:src="@drawable/ic_history" />
<TextView android:textSize="20.0sp" android:textColor="@color/blue_title"
android:gravity="center" android:layout_gravity="center" android:id="@+id/tvHistoryPage"
android:layout_width="fill_parent" android:layout_height="wrap_content"
android:text="@string/SVEmptyHistoryTableMessage" android:lineSpacingExtra="2.0sp" />
</LinearLayout>
</LinearLayout>
<TextView
android:id="@+id/btnClearSearch"
android:textSize="15sp"
android:textColor="@android:color/black"
android:background="@drawable/selector_btn_home"
android:paddingLeft="@dimen/history_left_padding"
android:paddingTop="8dp"
android:paddingBottom="8dp"
android:layout_width="fill_parent"
xmlns:android="http://schemas.android.com/apk/res/android"
android:text="@string/SVSRClearHistoryCellTitle"
android:layout_height="fill_parent">
</TextView>
据我所知,您无法看到“清除”文本视图。如果是这种情况,请转到XML并将ListView和TextView嵌套在垂直线性布局中。然后调整您希望这两个视图的显示方式。据我所知,您无法看到“清除”文本视图TextView。如果是这种情况,只需转到XML并将ListView和TextView嵌套在垂直线性布局中。然后调整两者的显示方式。试试这个
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<ListView
android:id="@+id/lvHistory"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@id/linLayoutEmptyList"
android:listSelector="@android:color/transparent"
android:longClickable="true"
android:overScrollMode="never"
android:soundEffectsEnabled="false" />
<LinearLayout
android:id="@+id/linLayoutEmptyList"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:gravity="center"
android:orientation="vertical"
android:paddingBottom="32.0dip"
android:visibility="visible">
<ImageView
android:id="@+id/ivHistoryPage"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:src="@drawable/ic_fav" />
<TextView
android:id="@+id/tvHistoryPage"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:gravity="center"
android:lineSpacingExtra="2.0sp"
android:text="SVEmptyHistoryTableMessage"
android:textSize="20.0sp" />
</LinearLayout>
</RelativeLayout>
试试这个
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<ListView
android:id="@+id/lvHistory"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@id/linLayoutEmptyList"
android:listSelector="@android:color/transparent"
android:longClickable="true"
android:overScrollMode="never"
android:soundEffectsEnabled="false" />
<LinearLayout
android:id="@+id/linLayoutEmptyList"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:gravity="center"
android:orientation="vertical"
android:paddingBottom="32.0dip"
android:visibility="visible">
<ImageView
android:id="@+id/ivHistoryPage"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:src="@drawable/ic_fav" />
<TextView
android:id="@+id/tvHistoryPage"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:gravity="center"
android:lineSpacingExtra="2.0sp"
android:text="SVEmptyHistoryTableMessage"
android:textSize="20.0sp" />
</LinearLayout>
</RelativeLayout>
我尝试在ListView下面包含布局,但如果可能的话,最好创建一个适配器来实现所有这一切,并且只在片段中调用该适配器,因为您可以看到db是否为空,它会显示其他内容。因此,您希望TextView仅在db不为空时显示?您可以检查此条件n在适配器中作为布尔值,然后相应地设置其可见性。是仅当db不为空时我没有适配器。1.打开以了解如何写入ArrayAdapter。2.检查适配器中的条件。例如,如果db返回一个列表,请使用自定义布尔值方法检查它是否为空。然后可以使用该方法In当您从db获取列表并相应地显示TextView时,您的活动。例如,使用上述代码。我假设lisData是db返回的字符串列表。您可以检查以下空条件:public void setViews(){if(listData.isEmpty()| listData==null){//隐藏文本视图}
//不确定检查null是否有点过多,但我会这样做。您必须包含一个else语句,以便在列表不为空时显示TextView。我已尝试将布局包含在ListView下面,但如果可能,最好创建一个适配器,使所有这些都只包含在片段中若要调用该适配器,因为您可以看到数据库是否为空,它会显示其他内容。因此,您希望TextView仅在数据库不为空时显示?您可以在适配器中检查此条件,将其作为布尔值,然后相应地设置其可见性。是,仅当数据库不为空时,我没有适配器。1.打开以了解如何写入ArrAyaAdapter.2.检查适配器中的条件。例如,如果db返回一个列表,请使用自定义布尔方法检查它是否为空。然后,当您从db获取列表并相应地显示TextView时,您可以在活动中使用该方法。例如,使用上述代码。我假设lisData是