Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/225.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在Xamarin Android C中将单独的参数传递给ListView.ItemClick调用#_C#_Android_Listview_Android Listview_Xamarin.android - Fatal编程技术网

C# 如何在Xamarin Android C中将单独的参数传递给ListView.ItemClick调用#

C# 如何在Xamarin Android C中将单独的参数传递给ListView.ItemClick调用#,c#,android,listview,android-listview,xamarin.android,C#,Android,Listview,Android Listview,Xamarin.android,因此,我尝试将一个参数传递给ListView.ItemClick调用,但我似乎不知道如何在没有任何错误的情况下执行此操作,以下是我的代码: public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { base.OnCreateView(inflater, container, savedInstanceState)

因此,我尝试将一个参数传递给ListView.ItemClick调用,但我似乎不知道如何在没有任何错误的情况下执行此操作,以下是我的代码:

 public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
    {
        base.OnCreateView(inflater, container, savedInstanceState);
        var view = inflater.Inflate(Resource.Layout.Dialog_Load, container, false);

        mListView = view.FindViewById<ListView>(Resource.Id.LoadListView);
        var responseResult = Load(UserID).Result;

        //Creates an array that contains all the different names and IDs
        string[] responseList = responseResult.Split(",");
        //Using lists to hold the different number of values as they can expand dynamically as opposed to a static array
        var ProgressionIDs = new List<string>();
        var ProgressionNames = new List<string>();

        //Separates ChordProgressionID from ChordProgressionName
        for (int index = 0; index < responseList.Length; index++)
        {
            if (int.TryParse(responseList.ElementAt(index), out _))
            {
                ProgressionIDs.Add(responseList.ElementAt(index));
            }
            else if (responseList.ElementAt(index) == "")
            {
                //Stops the last comma from responseResult creating an empty slot in the array,
                //which would create an unwanted empty item in the listview.
            }
            else
            {
                ProgressionNames.Add(responseList.ElementAt(index));
            }
        }

        //Converts name list to array so that it can be set to the adapter
        string[] ProgressionNamesArr = new string[ProgressionNames.Count()];
        ProgressionNamesArr = ProgressionNames.ToArray();

        ArrayAdapter<string> adapter = new ArrayAdapter<string>(this.Activity, Android.Resource.Layout.SimpleListItem1, ProgressionNamesArr);
        mListView.Adapter = adapter;

        mListView.ItemClick += mListView_ItemClick;

        return view;
    }
    public void mListView_ItemClick(object sender, AdapterView.ItemClickEventArgs e)
    {
        int position = e.Position;
        var id = ProgressionIDs[e.Position];

    }

    private async Task<string> Load(string UserID)
    {
        //User has clicked the save button
        HttpClient client = new HttpClient();
        Uri uri = new Uri("**some url**");

        HttpContent formContent = new FormUrlEncodedContent(new[]
        {
            new KeyValuePair<string, string>("UserID", UserID),
        });

        //Gets a response in terms of connection to the server
        HttpResponseMessage response = await client.PostAsync(uri, formContent);

        response.EnsureSuccessStatusCode();

        //Gets 'echo' response from PHP file.
        string responseResult = await response.Content.ReadAsStringAsync();
        return responseResult;

    }
public override视图OnCreateView(布局、充气机、视图组容器、Bundle savedInstanceState)
{
base.OnCreateView(充气机、容器、保存状态);
var视图=充气机。充气(Resource.Layout.Dialog\u Load,container,false);
mListView=view.findviewbyd(Resource.Id.LoadListView);
var responseResult=Load(UserID).Result;
//创建包含所有不同名称和ID的数组
字符串[]responseList=responseResult.Split(“,”);
//使用列表保存不同数量的值,因为它们可以动态扩展,而不是静态数组
var ProgressionIDs=新列表();
var ProgressionNames=新列表();
//将ChordProgressionID与ChordProgressionName分开
for(int index=0;index
我知道我现在使用的OnClick子例程没有意义,因为我实际上没有发送
ProgressionIDs
的实例


我需要知道一种解决方法,这样我就可以在
mListView
上点击项目的位置,然后在该位置选择
ProgressionIDs
,并将其存储在变量中。

您能给我一个数据结构吗?一个ProgressionID对应一个ProgressionName

如果是这样,您可以为
Progression
创建一个模型,该模型包含两个属性,如以下数据结构

   public class Progression
{

    public string ProgressionIDs { get; set; }
    public string ProgressionNames { get; set; }
}
我使用静态数据填充
列表
。当您在listview中单击该项目时,您可以获得该职位,然后记录到该职位以在
列表中获得该职位的名称

这里是运行GIF


我试试看,有没有办法把元素放大?我使用一个对话框片段来显示listview,我向用户显示的只是名称,我使用的是ID,因此当我点击某个内容时,它会使用与名称相关的ID从服务器获取其他数据如果您想使元素变大,请设置
android:textSize=“30dp”
用于SimpleListEm1okay中的
TextView
,因此现在我的程序根本不会加载对话框片段,然后它会显示应用程序在等待后没有响应。不管怎样,我还是设法解决了它!原来我在OnCreateView中做了太多的工作,所以我不得不在前面的片段中调用数据库并传递值,然后它实际上开始加载,就像gif一样。
  List<Progression> progressions;
    public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
    {


        View view = inflater.Inflate(Resource.Layout.layout1, container, false);
        ListView listView1 = view.FindViewById<ListView>(Resource.Id.listView1);
        progressions = new List<Progression>();

        progressions.Add(new Progression() { ProgressionIDs="1" , ProgressionNames= "Vegetables" });
        progressions.Add(new Progression() { ProgressionIDs = "2", ProgressionNames = "Fruits" });
        progressions.Add(new Progression() { ProgressionIDs = "3", ProgressionNames = "Flower Buds" });
        progressions.Add(new Progression() { ProgressionIDs = "4", ProgressionNames = "Legumes" });
        progressions.Add(new Progression() { ProgressionIDs = "5", ProgressionNames = "Bulbs" });
       progressions.Add(new Progression() { ProgressionIDs = "6", ProgressionNames = "Tubers" });
        var myAdapter=new MyAdapter(this.Activity, progressions);
        listView1.Adapter = myAdapter;

        listView1.ItemClick += ListView1_ItemClick;
        return view;

    }

    private void ListView1_ItemClick(object sender, AdapterView.ItemClickEventArgs e)
    {
        var myPostion= e.Position;
        Progression progression = progressions[myPostion];
        Toast.MakeText(this.Activity,progression.ProgressionIDs+" "+progression.ProgressionNames,ToastLength.Short).Show();

    }
      public class MyAdapter : BaseAdapter<Progression>
{
    private Activity mActivity;
    private List<Progression> items;

    public MyAdapter(Activity mActivity, List<Progression>  progressions)
    {
        this.mActivity = mActivity;
        this.items = progressions;
    }


    public override Progression this[int position] => items[position];



    public override int Count => items.Count();

    public override long GetItemId(int position)
    {
        return position;
    }

    public override View GetView(int position, View convertView, ViewGroup parent)
    {
        View view = convertView;
        if (view == null) // no view to re-use, create new
            view = mActivity.LayoutInflater.Inflate(Resource.Layout.SimpleListItem1, null);
        view.FindViewById<TextView>(Resource.Id.textView1).Text = items[position].ProgressionIDs;
        view.FindViewById<TextView>(Resource.Id.textView2).Text = items[position].ProgressionNames;

        return view;
    }

}
   <?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">
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/textView1"
        android:text="test1"
        android:layout_marginRight="@dimen/abc_action_bar_content_inset_material"
    />

 <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/textView2"
        android:text="test2"
    />
</LinearLayout>