介绍
简单应用demo
主要代码如下:
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.xxx.testlistview.MainActivity">
<TextView
android:id="@+id/txt_title"
android:layout_width="match_parent"
android:layout_height="56dp"
android:background="@color/blue"
android:textColor="@color/white"
android:text="商品列表"
android:textSize="20dp"
android:textStyle="bold"
android:gravity="center"/>
<FrameLayout
android:id="@+id/fl_content"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@+id/txt_title"></FrameLayout>
</RelativeLayout>
fg_newlist.xml
activity打开之后加载的listview显示列表
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/txt_content"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:textColor="@color/blue"
android:textSize="20sp"/>
</LinearLayout>
fg_content.xml
选择列表项之后点击操作显示的内容
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/txt_content"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:textColor="@color/blue"
android:textSize="20sp"/>
</LinearLayout>
MainActivity.java
显示 NewListFragment的内容
public class MainActivity extends AppCompatActivity {
private TextView txt_title;
private FrameLayout fl_content;
private Context mContext;
private ArrayList<Data> mDatas = null;
private FragmentManager fManager = null;
private long exitTime = 0 ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mContext = MainActivity.this;
fManager = getFragmentManager();
bindViews();
mDatas = new ArrayList<Data>();
for(int i = 1; i <= 5; i++){
Data data = new Data("商品 " + i,i + "~商品信息");
mDatas.add(data);
}
NewListFragment nlFragment = new NewListFragment();
nlFragment.setfManager(fManager);
nlFragment.setmDatas(mDatas);
FragmentTransaction ft = fManager.beginTransaction();
ft.replace(R.id.fl_content, nlFragment);
ft.commit();
}
private void bindViews() {
txt_title = (TextView) findViewById(R.id.txt_title);
fl_content = (FrameLayout) findViewById(R.id.fl_content);
}
//点击回退键的处理:判断Fragment栈中是否有Fragment
//没,双击退出程序,否则像是Toast提示
//有,popbackstack弹出栈
@Override
public void onBackPressed() {
if (fManager.getBackStackEntryCount() == 0) {
if ((System.currentTimeMillis() - exitTime) > 2000) {
Toast.makeText(getApplicationContext(), "再按一次退出程序",
Toast.LENGTH_SHORT).show();
exitTime = System.currentTimeMillis();
} else {
super.onBackPressed();
}
} else {
fManager.popBackStack();
txt_title.setText("商品列表");
}
}
}
NewListFragment.java
给llistview添加adapter,并监听点击操作
public class NewListFragment extends Fragment implements AdapterView.OnItemClickListener{
private FragmentManager fManager;
private ArrayList<Data> mDatas;
private ListView list_views;
private View view;
public NewListFragment() {
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
view = inflater.inflate(R.layout.fg_newlist, container, false);
Log.e(this.getClass().getSimpleName(), "container: " + container);
Log.e(this.getClass().getSimpleName(),"view: " + view );
list_views = (ListView) view.findViewById(R.id.list_news);
MyAdapter myAdapter = new MyAdapter(getmDatas(), getActivity());
list_views.setAdapter(myAdapter);
list_views.setOnItemClickListener(this);
return view;
}
public FragmentManager getfManager() {
return fManager;
}
public void setfManager(FragmentManager fManager) {
this.fManager = fManager;
}
public ArrayList<Data> getmDatas() {
return mDatas;
}
public void setmDatas(ArrayList<Data> mDatas) {
this.mDatas = mDatas;
}
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
Log.e(this.getClass().getSimpleName(),"adapterView: " + adapterView );
Log.e(this.getClass().getSimpleName(), "view: " + view);
FragmentTransaction fTransaction = fManager.beginTransaction();
NewContentFragment ncFragment = new NewContentFragment();
Bundle bd = new Bundle();
bd.putString("content", mDatas.get(i).getNew_content());
ncFragment.setArguments(bd);
//获取Activity的控件
TextView txt_title = (TextView) getActivity().findViewById(R.id.txt_title);
txt_title.setText(mDatas.get(i).getNew_content());
//加上Fragment替换动画
//fTransaction.setCustomAnimations(R.anim.fragment_slide_left_enter, R.anim.fragment_slide_left_exit);
fTransaction.replace(R.id.fl_content, ncFragment);
//调用addToBackStack将Fragment添加到栈中
fTransaction.addToBackStack(null);
fTransaction.commit();
}
}
MyAdapter.java
listview 适配器
public class MyAdapter extends BaseAdapter {
private List<Data> mData;
private Context mContext;
public MyAdapter(List<Data> mData, Context mContext) {
this.mData = mData;
this.mContext = mContext;
}
@Override
public int getCount() {
return mData.size();
}
@Override
public Object getItem(int i) {
return null;
}
@Override
public long getItemId(int i) {
return i;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder;
if(null == convertView){
Log.e(this.getClass().getSimpleName(),"MyAdapter--- parent: " + parent);
convertView = LayoutInflater.from(mContext).inflate(R.layout.fg_content, parent,false);
viewHolder = new ViewHolder();
Log.e(this.getClass().getSimpleName(),"convertView: " + convertView );
viewHolder.txt_item_title = (TextView) convertView.findViewById(R.id.txt_content);
convertView.setTag(viewHolder);
Log.e(this.getClass().getSimpleName(),"MyAdapter--- mData: " + mData.size() + ",viewHolder.txt_item_title: " + viewHolder.txt_item_title);
}else{
viewHolder = (ViewHolder) convertView.getTag();
}
viewHolder.txt_item_title.setText(mData.get(position).getNew_title());
return convertView;
}
private class ViewHolder {
private TextView txt_item_title;
}
}
NewContentFragment.java
listview选项中显示的内容
public class NewContentFragment extends Fragment {
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fg_content, container, false);
TextView txt_content = (TextView) view.findViewById(R.id.txt_content);
//getArgument获取传递过来的Bundle对象
txt_content.setText(getArguments().getString("content"));
return view;
}
}
Data.java
信息类
public class Data {
private String new_title;
private String new_content;
public Data(String new_title, String new_content) {
this.new_title = new_title;
this.new_content = new_content;
}
public String getNew_title() {
return new_title;
}
public void setNew_title(String new_title) {
this.new_title = new_title;
}
public String getNew_content() {
return new_content;
}
public void setNew_content(String new_content) {
this.new_content = new_content;
}
}