这是我在Xamarin for Android中的第一个应用程序。我想从两个屏幕开始:
但我有ListView的问题。例如:我想将第一个任务添加到ListView,返回第一个屏幕,添加第二个任务(第一个任务应该已经在列表中),返回第一个屏幕,按钮显示第二个屏幕,两个任务应该已经存在。
主要活动:
public class MainActivity : Activity
{
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
SetContentView(Resource.Layout.Main);
Button addButton1 = FindViewById<Button>(Resource.Id.AddButton1);
Button addButton2 = FindViewById<Button>(Resource.Id.AddButton2);
Button downloadsScreen = FindViewById<Button>(Resource.Id.DownloadsScreen);
var intent = new Intent(this, typeof(Downloads));
addButton1.Click += (object sender, EventArgs e) =>
{
intent.PutExtra("downloads", "wartosc1");
StartActivity(intent);
};
addButton2.Click += (object sender, EventArgs e) =>
{
intent.PutExtra("downloads", "wartosc2");
StartActivity(intent);
};
downloadsScreen.Click += (object sender, EventArgs e) =>
{
StartActivity(intent);
};
}
}
活动与任务:
public class Downloads : ListActivity
{
Dictionary<string, Task> zadania = new Dictionary<string, Task>();
List<string> listaZadan = new List<string>();
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
ArrayAdapter<string> lista = new ArrayAdapter<string>(this, Android.Resource.Layout.SimpleListItem1, listaZadan);
}
protected override void OnStart()
{
var download = Intent.GetStringExtra("downloads") ?? null;
Task zadanie = new Task();
EncryptAndDecrypt decryption = new EncryptAndDecrypt();
zadanie = JsonConvert.DeserializeObject<Task>(decryption.Decrypt(download, "haslo"));
if (!zadania.ContainsKey(zadanie.Name))
{
zadania.Add(zadanie.Name, zadanie);
listaZadan.Add(zadanie.Name);
}
else
new AlertDialog.Builder(this).SetMessage("Zadanie zostało już dodane do pobierania").Show();
}
}
我该如何解决?这样的列表是显示下载文件的好方法吗?在将来,我想将ProgressBar添加到ListView中的每个项目。请不要发送教程链接,我看到了所有内容。我关心处理它的人的信息。
答案 0 :(得分:1)
我该如何解决?这样的列表是显示下载文件的好方法吗?
不确定原因,我在开始一个像你在代码中那样继承ListActivity
的新活动时没有任何信息,因此我决定使用{{1}的普通Activity
例如,在其布局中控制:
downloadslayout.axml:
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">
<ListView android:id="@+id/listview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#00FF00"
android:layout_weight="1"
android:drawSelectorOnTop="false" />
</LinearLayout>
继承自Downloads
时,我们需要设置ListActivity
,因此如果您没有获得与我相同的例外,则需要添加以下代码:
ListAdapter
<{1}} ListAdapter = lista;
中的。
但是对于我的方法,我们首先需要在OnCreate
中找到这个Downloads
,然后设置它的适配器,它们实际上是相同的。
ListView
将来我想将ProgressBar添加到ListView中的每个项目。
因此,对于您未来的意图,我不认为直接使用DownloadsLayout
是一种很好的方法,我们可以自定义我们自己的适配器,同时您可以自定义protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
SetContentView(Resource.Layout.downloadslayout);
ListView lv = FindViewById<ListView>(Resource.Id.listview);
ArrayAdapter<string> lista = new ArrayAdapter<string>(this, Android.Resource.Layout.SimpleListItem1, listaZadan);
lv.Adapter = lista;
}
单元格。 ArrayAdapter
的{{1}}方法,例如:
ListView
而GetView
就是这样的:
Adapter
通过检查您的代码,您似乎只想将字符串传递给每个项目,因此我在此使用public class DownloadsAdapter : BaseAdapter<string>
{
private List<string> items = new List<string>();
private Activity context;
public DownloadsAdapter(Activity context, List<string> items) : base()
{
this.context = context;
this.items = items;
}
public override string this[int position]
{
get { return items[position]; }
}
public override int Count
{
get { return items.Count; }
}
public override long GetItemId(int position)
{
return position;
}
public override View GetView(int position, View convertView, ViewGroup parent)
{
View view = convertView; // re-use an existing view, if one is available
if (view == null)
{ // otherwise create a new one
view = context.LayoutInflater.Inflate(Resource.Layout.downloadscell, null);
}
var pbar = view.FindViewById<ProgressBar>(Resource.Id.progressbar);
var tv = view.FindViewById<TextView>(Resource.Id.tv);
tv.Text = items[position];
return view;
}
}
,您可以根据需要更改为其他类型。最后在你的downloadscell.axml
:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ProgressBar
android:id="@+id/progressbar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
style="@android:style/Widget.ProgressBar.Small"
android:layout_marginRight="5dp" />
<TextView
android:id="@+id/tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/loading" />
</LinearLayout>