android fragment如何创建列表明细

原创
小哥 3年前 (2022-10-19) 阅读数 6 #技术教程
文章标签 fragmentandroid安卓

只是在行刑过程中。只有在中间我们才能表演。只有在中间,我们才能执行。1-使用fragment

笔记自《Android编程的权威指南,第二版

(内核)对应于内核的外层,即用户与内核之间的对话界面。

fragment是一个控制器对象,它是一个控制器对象。是控制器对象,则activity它可以被委托执行许多任务,这些任务通常是管理用户界面。(管理的用户界面fragment又称UI fragment。(它还会生成自己的布局文件)

利用fragment通过选择不同的列表项,列表可以轻松地显示对应的详细信息视图。Activity负责分项负责fragment在没有编译的情况下被解释和执行。在不编译的情况下执行。fragment

是一个工具箱,它提供了各种小部件,让用户可以轻松使用操作系统的功能。activity程序有很多种,任何向用户提供命令行环境的程序都可以被认为是fragment的视图。fragment不能在屏幕本身上显示视图。

有以下几点。以下是可用的。它们如下所示。

dependencies {
compile fileTree(include: [*.jar], dir: libs)
androidTestCompile(com.android.support.test.espresso:espresso-core:2.2.2, {
exclude group: com.android.support, module: support-annotations
})
compile com.android.support:appcompat-v7:26.+
compile com.android.support.constraint:constraint-layout:1.0.0-alpha8
testCompile junit:junit:4.12
compile com.android.support:support-v4:26.0.0-alpha1
compile com.android.support:recyclerview-v7:26.0.0-alpha1
}

项目结构。

Crime实体类:

package com.homelink.testcriminal;

import java.util.Date; import java.util.UUID;

/**

  • Created by ysc on 2017/9/30. */

public class Crime {

private UUID mId;
private String mTitle;
private Date mDate;
private boolean mSolved;
public Crime() {
    mId = UUID.randomUUID();
    mDate = new Date();
}

public UUID getId() {
    return mId;
}
public String getTitle() {
    return mTitle;
}
public void setTitle(String title) {
    mTitle = title;
}

public Date getDate() {
    return mDate;
}
public void setDate(Date date) {
    mDate = date;
}
public boolean isSolved() {
    return mSolved;
}
public void setSolved(boolean solved) {
    mSolved = solved;
}

}

View Code

SingleFragmentActivity抽象基类的抽象基类CrimeActivity , CrimeListActivity。而这两个人Activity查看所有当前安装的系统查看所有当前安装的系统查看所有当前安装的系统Fragment

package com.homelink.testcriminal;

import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentActivity; import android.support.v4.app.FragmentManager;

/**

  • Created by ysc on 2017/9/30. */

public abstract class SingleFragmentActivity extends FragmentActivity {

protected abstract Fragment createFragment();

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity\_fragment);
    FragmentManager fm = getSupportFragmentManager();
    Fragment fragment = fm.findFragmentById(R.id.fragment\_container);
    if (fragment == null) {
        fragment = createFragment();
        fm.beginTransaction()
                .add(R.id.fragment\_container, fragment)
                .commit();
    }
}

}

View Code

CrimeActitiy.java

package com.homelink.testcriminal;

import android.support.v4.app.Fragment; import android.support.v4.app.FragmentActivity; import android.support.v4.app.FragmentManager; import android.os.Bundle;

public class CrimeActivity extends SingleFragmentActivity {

@Override
protected Fragment createFragment() {
    return new CrimeFragment();
}

}

View Code

CrimeListActivity.java

package com.homelink.testcriminal;

import android.support.v4.app.Fragment;

/**

  • Created by ysc on 2017/9/30. */

public class CrimeListActivity extends SingleFragmentActivity {

@Override
protected Fragment createFragment() {
    return new CrimeListFragment();
}

}

View Code

activity_fragment.xml 的layout命令行提示命令行提示命令行提示fragment。这很简单,只需放一个FrameLayout用于承载用于承载的轴承Fragment

<?xml version="1.0" encoding="utf-8"?> <LinearLayout 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.homelink.testcriminal.CrimeActivity">

View Code

fragment_crime.xml布局:

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"

<TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@string/crime_title_label" style="?android:listSeparatorTextViewStyle" /> <EditText android:id="@+id/crime_title" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginLeft="16dp" android:layout_marginRight="16dp" android:hint="@string/crime_title_hint" /> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@string/crime_details_label" style="?android:listSeparatorTextViewStyle" /> <Button android:id="@+id/crime_date" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginLeft="16dp" android:layout_marginRight="16dp" /> <CheckBox android:id="@+id/crime_solved" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginLeft="16dp" android:layout_marginRight="16dp" android:text="@string/crime_solved_label" />

View Code

横向:

<?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">






    

View Code

CrimeFragment.java结束时,用户可以在此符号后输入各种命令。

package com.homelink.testcriminal;

import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v4.app.Fragment; import android.text.Editable; import android.text.TextWatcher; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.Button; import android.widget.CheckBox; import android.widget.EditText;

/**

  • Created by ysc on 2017/9/30. */

public class CrimeFragment extends Fragment { private Crime mCrime; private EditText mTitleField;

private Button mDateButton;
private CheckBox mSolvedCheckBox;

@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    mCrime = new Crime();

}

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View v = inflater.inflate(R.layout.fragment\_crime, container, false);

    mTitleField = (EditText)v.findViewById(R.id.crime\_title);
    mTitleField.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(
                CharSequence s, int start, int count, int after) {
                // This space intentionally left blank
        }
        @Override
        public void onTextChanged(
                CharSequence s, int start, int before, int count) {
            mCrime.setTitle(s.toString());
        }
        @Override
        public void afterTextChanged(Editable s) {
            // This one too
        }
    });

    mDateButton = (Button)v.findViewById(R.id.crime\_date);
    mDateButton.setText(mCrime.getDate().toString());
    mDateButton.setEnabled(false);

    return v;
}

}

View Code

列表项控制列表项控制列表条目的控制CrimeListFragment.java:

package com.homelink.testcriminal;

import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.CheckBox; import android.widget.TextView; import android.widget.Toast;

import java.util.List;

/**

  • Created by ysc on 2017/9/30. */

public class CrimeListFragment extends Fragment {

private RecyclerView mCrimeRecyclerView;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment\_crime\_list, container, false);
    mCrimeRecyclerView = (RecyclerView) view.findViewById(R.id.crime\_recycler\_view);
    mCrimeRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));

    updateUI();

    return view;
}

private CrimeAdapter mAdapter;
private void updateUI() {
    CrimeLab crimeLab = CrimeLab.get(getActivity());
    List crimes = crimeLab.getCrimes();

    mAdapter = new CrimeAdapter(crimes);
    mCrimeRecyclerView.setAdapter(mAdapter);
}

private class CrimeHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

    private Crime mCrime;

    private TextView mTitleTextView;
    private TextView mDateTextView;
    private CheckBox mSolvedCheckBox;

    public CrimeHolder(View itemView) {
        super(itemView);

        itemView.setOnClickListener(this);
        mTitleTextView = (TextView) itemView.findViewById(R.id.list\_item\_crime\_title\_text\_view);
        mDateTextView = (TextView) itemView.findViewById(R.id.list\_item\_crime\_date\_text\_view);
        mSolvedCheckBox = (CheckBox)itemView.findViewById(R.id.list\_item\_crime\_solved\_check\_box);
    }

    public void BindCrime(Crime crime){
        mCrime = crime;
        mTitleTextView.setText(mCrime.getTitle());
        mDateTextView.setText(mCrime.getDate().toString());
        mSolvedCheckBox.setChecked(mCrime.isSolved());
    }

    @Override
    public void onClick(View view) {
        Toast.makeText(getActivity(), mCrime.getTitle() + " clicked!", Toast.LENGTH\_SHORT).show();
    }
}
private class CrimeAdapter extends RecyclerView.Adapter {
    private List mCrimes;
    public CrimeAdapter(List crimes) {
        mCrimes = crimes;
    }

    @Override
    public CrimeHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        LayoutInflater layoutInflater = LayoutInflater.from(getActivity());
        View view = layoutInflater.inflate(R.layout.list\_item\_crime, parent, false);
        return new CrimeHolder(view);
    }
    @Override
    public void onBindViewHolder(CrimeHolder holder, int position) {
        Crime crime = mCrimes.get(position);
        //holder.mTitleTextView.setText(crime.getTitle());
        holder.BindCrime(crime);
    }
    @Override
    public int getItemCount() {
        return mCrimes.size();
    }
}

}

View Code

数据从何而来,数据来自何处的单个实例,CrimeLab.java

package com.homelink.testcriminal;

import android.content.Context;

import java.util.ArrayList; import java.util.List; import java.util.UUID;

/**

  • Created by ysc on 2017/9/30. */

public class CrimeLab {

private static CrimeLab sCrimeLab;
public static CrimeLab get(Context context) {
    if (sCrimeLab == null) {
        sCrimeLab = new CrimeLab(context);
    }
    return sCrimeLab;
}
private CrimeLab(Context context) {
    initCrimes();
}

private List mCrimes;
private void initCrimes(){
    mCrimes = new ArrayList<>();
    for (int i = 0; i < 100; i++) {
        Crime crime = new Crime();
        crime.setTitle("Crime #" + i);
        crime.setSolved(i % 2 == 0); // Every other one
        mCrimes.add(crime);
    }
}

public List getCrimes() {
    return mCrimes;
}
public Crime getCrime(UUID id) {
    for (Crime crime : mCrimes) {
        if (crime.getId().equals(id)) {
            return crime;
        }
    }
    return null;
}

}

View Code

:表示用户名。:表示用户名。:表示用户名。recyclerview,fragment_crime_list.xml布局:

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.RecyclerView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/crime_recycler_view"
android:layout_width="match_parent"
android:layout_height="match_parent"/>

:表示主机名。:表示主机名。:表示主机名。list_item_crime.xml:

<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="wrap_content">





View Code

:表示当前目录为主目录,其中AndroidManifest.xml文件:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.homelink.testcriminal">

  

      
          
              
              
          
      
      

      
  

运行:

posted on 2017-09-30 13:06 Anders Yan 阅读( ... ) 评论( ... ) 编辑 收藏

转载于:https://www.cnblogs.com/yansc/p/7614619.html

版权声明

所有资源都来源于爬虫采集,如有侵权请联系我们,我们将立即删除