以串列控制元件(如:ListView或RecyclerView)實作如圖所示界面效果:(后面我給ListView里面加了item的點擊事件)

實驗程序:
首先我們要在activity-main.xml創建一個ListView,設定id為lstView
代碼:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:android="http://schemas.android.com/apk/res/android">
<ListView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/lstView"></ListView>
</LinearLayout>
然后開始創建一個Layout Source File,右鍵在layout上面然后創建,取名為items,這個是lstView里面每個項的樣式,根據實驗報告,我們創建一個大概這樣的樣式:

items.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="match_parent"
android:orientation="horizontal">
<ImageView
android:layout_width="100dp"
android:layout_height="100dp"
android:id="@+id/Icon"></ImageView>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="100dp"
android:orientation="vertical">
<LinearLayout
android:gravity="center"
android:layout_width="match_parent"
android:layout_height="50dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="30sp"
android:id="@+id/Title"
></TextView>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_marginTop="10dp"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:gravity="bottom"
android:id="@+id/Source"
></TextView>
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="bottom|right"
android:id="@+id/Time"
></TextView>
</LinearLayout>
</LinearLayout>
</LinearLayout>
有了上述這些就可以準備寫MainActivity中的代碼了,首先我們要創建一個陣列,和四個字串組,陣列是用來儲存圖片的檔案路徑的,在安卓里面檔案的路徑回傳的是整數型,比如我們可以看到:

這里new1這個圖片的路徑回傳的是整數型1500001.
其它四個陣列存盤內容,標題,來源,時間,
然后我們要宣告一個ListView,并且為它系結剛剛我們在activity-main.xml所創建的lstView
然后我們要創建一個Haspmap<String,Object>的數列,里面存著Haspmap<String,Object>
每個map里面存的是ListView里面每一項的資料,
然后我們通過for回圈向Hashmap里面添加實體
代碼:
for(int i = 0;i<icons.length;i++)
{
Map<String,Object> map=new HashMap<String, Object>() ;
map.put("標題",titles[i]);//第一個引數是Key,也就是為變數取一個名字
map.put("來源",sources[i]);
map.put("圖片",icons[i]);
map.put("時間",times[i]);
itemsPicker.add(map);
}
然后我們再設定配接器,這次我們用的是SimpleAdapter,名字是簡單配接器,但是其實相對之前發布的博客里的配接器,要復雜一些,

我們可以看到,SimpleAdapter里面一共有五個引數
第一個引數是背景關系,我們這里是用MainActivity,所以直接填this
第二個引數是我剛所創建的Haspmap的數列也就是List<Haspmap<String,Object>>
第三個引數是我們所創建的界面,也就是上文中所創建的items.xml
第四個是map里面對應的Key,上文有講到
第五個是items里面控制元件的名字,與四個引數相對應,把第四個引數里面的值賦給控制元件里面
代碼:
SimpleAdapter adapter=new SimpleAdapter(this,itemsPicker,R.layout.items,new String[]{"標題","來源","圖片","時間"},new int[]{R.id.Title,R.id.Source,R.id.Icon,R.id.Time});
然后為listView裝配配接器,
listView.setAdapter(adapter);
上面就把界面給實作了,點擊運行可以出來界面,后續可以不看,我后面實作的是點擊ListView里面的item,根據點擊的是哪一個跳轉到DetailActivity,并且攜帶相對應的資料,
現在開始實作點擊ListView里面的item,根據點擊的是哪一個跳轉到DetailActivity,并且攜帶相對應的資料,
先創建一個DetailActivity的活動,然后寫它的頁面
activity-detail.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout android:layout_height="match_parent"
android:layout_width="match_parent"
android:orientation="vertical"
xmlns:android="http://schemas.android.com/apk/res/android">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:gravity="center_horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="25sp"
android:textStyle="bold"
android:id="@+id/new_title">
</TextView>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
>
<TextView
android:gravity="bottom"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:paddingBottom="10dp"
android:id="@+id/new_source"
>
</TextView>
<TextView
android:gravity="bottom|right"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="10dp"
android:id="@+id/new_time"></TextView>
</LinearLayout>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/new_content"></TextView>
</LinearLayout>
</LinearLayout>
然后要在MainActivity中寫lstView的點擊事件
position是一個回傳你點擊的是哪一項的整數型,從0開始
intent可以看成是通信的信使
intent的用法有點類似Hashmap,
不過添加資料是用putExtra
最后不要忘記startActivity(intent)
代碼:
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Intent intent=new Intent(MainActivity.this,DetailActivity.class);
switch (position)
{
case 0:
intent.putExtra("標題",titles[position]);
intent.putExtra("內容",contents[position]);
intent.putExtra("來源",sources[position]);
intent.putExtra("時間",times[position]);
break;
case 1:
intent.putExtra("標題",titles[position]);
intent.putExtra("內容",contents[position]);
intent.putExtra("來源",sources[position]);
intent.putExtra("時間",times[position]);
break;
}
startActivity(intent);
}
});
然后就是書寫DetailActivity的代碼,相對 簡單,就一個需要注意的點,要
Intent intent =getIntent(),用intent的getStringExtra來獲取資料:
package com.example.homework22;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.TextView;
public class DetailActivity extends AppCompatActivity {
private TextView txttitle;
private TextView txtcontent;
private TextView txtsource;
private TextView txttime;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_detail);
txttitle=(TextView)findViewById(R.id.new_title);
txttime=(TextView)findViewById(R.id.new_time);
txtsource=(TextView)findViewById(R.id.new_source);
txtcontent=(TextView)findViewById(R.id.new_content);
Intent intent = getIntent();
txttitle.setText(intent.getStringExtra("標題"));
txttime.setText(intent.getStringExtra("時間"));
txtsource.setText(intent.getStringExtra("來源"));
txtcontent.setText(intent.getStringExtra("內容"));
}
}
代碼:
MainActivity.java代碼:
package com.example.homework22;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class MainActivity extends AppCompatActivity {
private int[] icons = {R.mipmap.news1,R.mipmap.news1};
private String[] contents = {"氣到了,不能用QQ找到的圖片?","隨便用兩個圖吧"};
private String[] titles = {"標題一,圖片放不上去啊","標題二,為什么找不到圖片"};
private String[] sources={"來源:新華網","來源:西南石油大學"};
private String[] times={"日期:2020/11/20" ,"日期:2020/11/19"};
private ListView listView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView=(ListView)findViewById(R.id.lstView);
List<Map<String,Object>> itemsPicker=new ArrayList<Map<String, Object>>();
for(int i = 0;i<icons.length;i++)
{
Map<String,Object> map=new HashMap<String, Object>() ;
map.put("標題",titles[i]);
map.put("來源",sources[i]);
map.put("圖片",icons[i]);
map.put("時間",times[i]);
itemsPicker.add(map);
}
SimpleAdapter adapter=new SimpleAdapter(this,itemsPicker,R.layout.items,new String[]{"標題","來源","圖片","時間"},new int[]{R.id.Title,R.id.Source,R.id.Icon,R.id.Time});
listView.setAdapter(adapter);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Intent intent=new Intent(MainActivity.this,DetailActivity.class);
switch (position)
{
case 0:
intent.putExtra("標題",titles[position]);
intent.putExtra("內容",contents[position]);
intent.putExtra("來源",sources[position]);
intent.putExtra("時間",times[position]);
break;
case 1:
intent.putExtra("標題",titles[position]);
intent.putExtra("內容",contents[position]);
intent.putExtra("來源",sources[position]);
intent.putExtra("時間",times[position]);
break;
}
startActivity(intent);
}
});
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/225879.html
標籤:其他
