【发布时间】:2020-02-20 02:00:23
【问题描述】:
我在 strings.xml 中创建了一个字符串数组列表,因此它可以在适配器中使用,但我不希望将存储在字符串中的数组设置为新的- listItemClick 打开新活动时的描述性文本。 请帮我。我想创建另一个数组列表作为完整描述,它应该不同于绑定到行的列表。
让我进一步描述一下我的意思。
我的 row.xml 显示一个 Image,TextView 作为 Title,另一个 TextView 作为 description。 现在我已经使用这种安排为我的 Model.java 生成构造函数和吸气剂
现在,如果我单击 ListView 项目的列表,它会打开一个 NewActivity.java,方法是将其存储在 string.xml 中的数据作为 arrayList 提供,即只需标题和说明文本。但我希望另一个不同于该 描述 的文本在 NewActivity.java 中显示为全新的描述文本。这就是我现在正在努力做的事情。
谢谢
这是 MainActivity.java 代码
public class MainActivity extends AppCompatActivity implements SearchView.OnQueryTextListener {
private String TAG = "MainActivity ----- ; " ;
// Store instance variables
private int page;
private ConsentForm form;
ListView listView;
ListViewAdapter adapter;
List<String> title, description2,description;
int[] icon;
int [] soundfile;
ArrayList<Model> arrayList = new ArrayList<Model>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ActionBar actionBar = getSupportActionBar();
actionBar.setTitle("Redeemed Songs");
//listview soundfile file for songs in position
soundfile= new int[] {R.raw.song_1,R.raw.song_2,R.raw.song_3, R.raw.song_4,R.raw.song_5,R.raw.song_6,R.raw.song_7,R.raw.song_8,};
title = Arrays.asList(getResources().getStringArray(R.array.array_titles));
description = Arrays.asList(getResources().getStringArray(R.array.array_lyrics));
description2 = Arrays.asList(getResources().getStringArray(R.array.array_lyrics2));
icon = new int[]{ R.drawable.song, R.drawable.song, R.drawable.song, R.drawable.song,R.drawable.song,R.drawable.song, R.drawable.song,};
listView = findViewById(R.id.list);
for (int i = 0; i< title.size(); i++){
Model model =new Model(title.get(i), description.get(i),description2.get(i), icon[i]);
//bind all strings in an array
arrayList.add(model);
}
//pass result to listview class
adapter = new ListViewAdapter(this, arrayList);
//bind the adapter to the listview class
listView.setAdapter(adapter);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu, menu);
MenuItem myActionMenuItem = menu.findItem(R.id.action_search);
SearchView searchView = (SearchView)myActionMenuItem.getActionView();
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String s) {
return false;
}
@Override
public boolean onQueryTextChange(String s) {
if (TextUtils.isEmpty(s)){
adapter.filter("");
listView.clearTextFilter();
}
else {
adapter.filter(s);
}
return true;
}
});
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id==R.id.action_settings){
Toast.makeText(this, "Settings Selected", Toast.LENGTH_SHORT).show();
startActivity(new Intent(this, Main2Activity.class));
return true;
//do your funtionality here
}
else if (id==R.id.action_howtouse){
Toast.makeText(this, "How-To", Toast.LENGTH_SHORT).show();
startActivity(new Intent(this, Main3Activity.class));
return true;
//do your funtionality here
}else if (id==R.id.action_favorites){
Toast.makeText(this, "Favorites Selected", Toast.LENGTH_SHORT).show();
startActivity(new Intent(this, Main3Activity.class));
return true;
//do your funtionality here
}
else if (id==R.id.action_developers){
Toast.makeText(this, "About", Toast.LENGTH_SHORT).show();
startActivity(new Intent(this, Main4Activity.class));
return true;
//do your funtionality here
}
return super.onOptionsItemSelected(item);
}
@Override
public boolean onQueryTextSubmit(String query) {
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
return false;
}
}
这是 ListViewAdapter.java
public class ListViewAdapter extends BaseAdapter{
//Variables
Context mContext;
LayoutInflater inflater;
List<Model> modellist;
ArrayList<Model> arrayList;
int [] soundfile;
//Constructor
public ListViewAdapter(Context context, List<Model> modellist) {
mContext = context;
this.modellist = modellist;
inflater = LayoutInflater.from(mContext);
this.arrayList = new ArrayList<Model>();
this.arrayList.addAll(modellist);
}
public class ViewHolder{
TextView mTitleTv, mDescTv;
ImageView mIconTv;
MediaPlayer mediaPlayer;
}
@Override
public int getCount() {
return modellist.size();
}
@Override
public Object getItem(int i) {
return modellist.get(i);
}
@Override
public long getItemId(int i) {
return i;
}
@Override
public View getView(final int i, View view, ViewGroup parent) {
final ViewHolder holder;
if (view==null){
holder = new ViewHolder();
view = inflater.inflate(R.layout.row, null);
//locate the views in row.xml
holder.mTitleTv = (TextView) view.findViewById(R.id.mainTitle);
holder.mDescTv = (TextView) view.findViewById(R.id.mainDesc);
holder.mIconTv = view.findViewById(R.id.mainIcon);
view.setTag(holder);
}
else {
holder = (ViewHolder)view.getTag();
}
//set the result into textview
holder.mTitleTv.setText(modellist.get(i).getTitle());
holder.mDescTv.setText(modellist.get(i).getDesc());
//Set the result in imagview
holder.mIconTv.setImageResource(modellist.get(i).getIcon());
//listview soundfile file for songs in position
soundfile= new int[] {R.raw.song_1,R.raw.song_2,R.raw.song_3, R.raw.song_4,R.raw.song_5,R.raw.song_6,R.raw.song_7,R.raw.song_8,};
//listview item clicks
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//code later
Intent intent = new Intent(mContext, NewActivity.class);
intent.putExtra("position", getViewTypeCount());
intent.putExtra("actionBarTitle", modellist.get(i).getTitle());
intent.putExtra("contentTv", modellist.get(i).getDesc());
mContext.startActivity(intent);
}
});
return view;
}
//filter
public void filter(String charText){
charText = charText.toLowerCase(Locale.getDefault());
modellist.clear();
if (charText.length()==0){
modellist.addAll(arrayList);
}
else {
for (Model model : arrayList){
if (model.getTitle().toLowerCase(Locale.getDefault()).contains(charText)){
modellist.add(model);
}
}
}
notifyDataSetChanged();
}
}
这是 String.xml
<resources>
<string name="app_name">Redeemed Songs</string>
<string-array name="array_lyrics">
<item>This song lyrics 1</item>
<item>This song lyrics 2</item>
</string-array>
<string-array name="array_lyrics2">
<item>This brand new description for song lyrics 1</item>
<item>This brand new description for song lyrics 1</item>
</string-array>
<string-array name="array_titles">
<item>Song 001</item>
<item>Song 002</item>
</string-array>
</resources>
【问题讨论】:
-
那么为什么不将这个全新的描述作为成员添加到模型类中呢?
-
非常感谢@**rahul khurana**。是的!你是对的,我只需要将全新的描述作为成员添加到模型类并使用 intent.putExtra 发送到 NewActivity。感谢一百万次
标签: java android listview android-arrayadapter