【发布时间】:2016-02-05 15:43:51
【问题描述】:
编辑:感谢@ankit aggarwal,我得到了一部分工作,即 TAB 1 没有切换到 TAB 2。在 TAB 2 中不刷新的视图仍然需要帮助。
我正在开发一个使用标签的应用程序。我的应用基于我在互联网上找到的示例here。
我拥有的是 TAB 1 中的 ListView。我想要发生的是,当我单击列表中的一个项目时,它会向 TAB 2 发送一个 ID,我想在其中根据传递的数据填充另一个 ListView .我在让它正常工作时遇到问题。
目前,我正在使用它,因此如果我单击 TAB 1 上列表中的一个项目,那么 TAB 2 会获取数据并填充新列表,但是它会添加到 TAB 2 上的视图中,而不是刷新/覆盖/etc.,并且应用程序不会自动切换到新选项卡。这就是我在 TAB 2 中的布局(即接收选项卡):
person.xml
<LinearLayout android:id="@+id/person_information_layout">
<TextView android:id="@+id/header_row" />
<LinearLayout>
<TextView android:id="@+id/column1_row_header" />
<TextView android:id="@+id/column2_row_header" />
<TextView android:id="@+id/column3_row_header" />
</LinearLayout>
<ListView android:id="@+row_of_data"></ListView>
</LinearLayout>
我正在使用 AdapterView 和数据库游标在接收选项卡 (TAB 2) 中填充此列表。
PersonInformation.java
package myPackage;
public class PersonInformation extends Fragment {
private View rootView;
private DatabaseHelper myDBHelper;
private Cursor informationCursor;
private SimpleCursorAdapter mySimpleCursorAdapter;
private TextView personIDDisplay;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
rootView = inflater.inflate(R.layout.person, container, false);
personID = getArguments().getString("personID");
myDBHelper = new DatabaseHelper(getActivity());
informationCursor = myDBHelper.getInformationCursor(personID);
String[] fromColumns = {"firstname", "lastname", "homephone", "homeaddress"};
int[] toViews = {R.id.firstname_textview, R.id.lastname_textview, R.id.homephone_textview, R.id.homeaddress_textview};
mySimpleCursorAdapter = new SimpleCursorAdapter(getActivity(), R.layout.person_information, informationCursor, fromColumns, toViews, 0);
personIDDisplay = (TextView) rootView.findViewById(R.id.header_row);
personIDDisplay.setText("Person ID: " + personID);
ListView myListView = (ListView) rootView.findViewById(R.id.row_of_data);
myListView.setAdapter(mySimpleCursorAdapter);
myDBHelper.close();
return rootView;
}
}
这是填充的 person_information 布局:
person_information.xml
<LinearLayout>
<TextView android:id="@+id/column1_data" />
<TextView android:id="@+id/column2_data" />
<TextView android:id="@+id/column3_data" />
</LinearLayout>
这是我的发送标签(TAB 1)
Home.java
package myPackage;
public class Home extends Fragment {
private View rootView;
private DatabaseHelper myDBHelper;
private Cursor personCursor;
private SimpleCursorAdapter mySimpleCursorAdapter;
private Activity myActivity;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
rootView = inflater.inflate(R.layout.home, container, false);
myDBHelper = new DatabaseHelper(getActivity());
personCursor = myDBHelper.getPersonCursor();
String[] fromColumns = {"personID"};
int[] toViews = {R.id.person_id_textview};
mySimpleCursorAdapter = new SimpleCursorAdapter(getActivity(), R.layout.person_layout, personCursor, fromColumns, toViews, 0);
ListView myListView = (ListView) rootView.findViewById(R.id.person_row);
myListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Cursor subCursor = (Cursor) mySimpleCursorAdapter.getItem(position);
String personIDNumber = subCursor.getString(subCursor.getColumnIndex("personID"));
PersonInformation personInformation = new PersonInformation();
Bundle myBundle = new Bundle();
myBundle.putString("personID", personIDNumber);
personInformation.setArguments(myBundle);
getFragmentManager().beginTransaction().replace(R.id.person_information_layout, personInformation).commit();
}
});
myListView.setAdapter(mySimpleCursorAdapter);
myDBHelper.close();
return rootView;
}
}
如您所见,我有一个布局,其中包含顶部信息行,然后是列标题行,然后是数据行。我想要的是这样的:
Top Information Row
Column Headers
data row 1
data row 2
...
data row n
目前,当我单击 TAB 1 中的人时,TAB 2 确实从 TAB 1 获取数据并正确填充了一个新列表,但是它在已经存在的顶级信息行和列标题下绘制它,所以我有图层:
Top Information Row
Column Headers
Top Information Row
Column Headers
data row 1
data row 2
...
data row n
此外,当我单击 TAB 1 中的一行时,该选项卡不会自动从 TAB 1 切换到 TAB 2。
而不是发送选项卡中的这一行(TAB 1)
getFragmentManager().beginTransaction().add(R.id.person_information_layout, personInformation).commit();
我把它改成了这一行:
getFragmentManager().beginTransaction().add(R.id.row_of_data, personInformation).commit();
但我得到了错误:
"addView(View) not supported in AdapterView"
据我了解,我无法将视图添加到 ListView,因此我将其更改回 ListView 的父级,但随后我得到了重复的视图。
我一直想改变我的接收标签(TAB 2)中的行
ListView myListView = (ListView) rootView.findViewById(R.id.row_of_data);
到这里
LinearLayout myLinearLayout = (LinearLayout) rootView.findViewById(R.id.person_information_layout);
但是光标适配器无法使用。
我需要做什么才能让它工作?
【问题讨论】:
标签: android listview android-fragments android-tabs