【发布时间】:2017-02-20 23:05:21
【问题描述】:
对于以下内容,我添加了以下 toast:
public void Toast (View v) {
Toast.makeText(this, "Test", Toast.LENGTH_LONG).show();
}
它可以工作,但显然它所做的只是为所有内容显示“测试”。我以为我可以做 'this.dogTitles' 或 'this.dogDescriptions' 但它不会让我这样做。
有人能解释一下原因吗?我已经把它放在 onCreate 方法中了。
谢谢
每当单击列表项(行)时,我都无法确定如何对 Toast 进行编程。
我可以为简单的程序做祝酒词,但由于数组适配器,我很难解决这样的问题。
我的代码如下。
提前致谢。
package lab.mad.cct.c3375331task2;
import android.content.Context;
import android.content.res.Resources;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
public class Task2Activity extends AppCompatActivity {
ListView list;
String [] dogTitles;
String [] dogDescriptions;
int[] images = {R.drawable.husky, R.drawable.pug, R.drawable.yorkshire_terrier, R.drawable.french_bulldog,
R.drawable.border_collie, R.drawable.great_dane, R.drawable.staffordshire_bull_terrier, R.drawable.golden_retriever,
R.drawable.german_shepherd, R.drawable.doberman};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_task2);
Resources res = getResources();
dogTitles = res.getStringArray(R.array.titles);
dogDescriptions = res.getStringArray(R.array.descriptions);
list = (ListView) findViewById(R.id.listView);
dogAdapter adapter = new dogAdapter(this, dogTitles, images, dogDescriptions);
list.setAdapter(adapter);
}
}
class dogAdapter extends ArrayAdapter<String>
{
Context context;
int[] images;
String[] titleArray;
String[] descriptionArray;
dogAdapter(Context c, String[] titles, int imgs[], String[] desc)
{
super(c, R.layout.single_row, R.id.largeText, titles);
this.context = c;
this.images = imgs;
this.titleArray = titles;
this.descriptionArray = desc;
}
class MyViewHolder
{
ImageView myImage;
TextView myTitle;
TextView myDescription;
MyViewHolder(View v)
{
myImage = (ImageView) v.findViewById(R.id.imageView);
myTitle = (TextView) v.findViewById(R.id.largeText);
myDescription = (TextView) v.findViewById(R.id.smallText);
}
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View row = convertView;
MyViewHolder holder = null;
if (row == null) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
row = inflater.inflate(R.layout.single_row, parent, false);
holder = new MyViewHolder(row);
row.setTag(holder);
Log.d("dogs", "Creating a new row");
}
else {
holder = (MyViewHolder) row.getTag();
Log.d("dogs", "Recycling stuff");
}
//ImageView myImage = (ImageView) row.findViewById(R.id.imageView);
//TextView myTitle = (TextView) row.findViewById(R.id.largeText);
//TextView myDescription = (TextView) row.findViewById(R.id.smallText);
holder.myImage.setImageResource(images[position]);
holder.myTitle.setText(titleArray[position]);
holder.myDescription.setText(descriptionArray[position]);
row.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast toast = new Toast(getContext());
toast.setDuration(Toast.LENGTH_LONG);
toast.show();
}
});
return row;
}
}
【问题讨论】:
-
this引用当前对象并根据调用位置更改它所引用的内容。我已经更新了我的答案,以展示如何从数组中获取值,但如果需要,你也可以从适配器中获取值。
标签: android listview android-arrayadapter android-toast