简体   繁体   English

将JSON字符串从片段传递到适配器的问题

[英]Issue to pass JSON string from fragment to adapter

I am a newbie to android Development, I was trying to implement a list view with items, by which when an item clicked it should display another list view with lists of specific items, I used JSON string values to populate the first list view, on item click I want to pass a JSON string with specific value of item clicked to list adapter, Here is may code: 我是android开发的新手,我试图用项目实现一个列表视图,当单击一个项目时,它应显示另一个包含特定项目列表的列表视图,我使用JSON字符串值填充了第一个列表视图, item click我想传递一个特定的JSON字符串,其中包含单击项目的特定值以列出适配器,这里可能是代码:

public class MainFragment extends Fragment{

ListView raw_List;
FragmentActivity activity;
Data.Raw[] messages;
Functions f;
TextView fname;


@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View v = inflater.inflate(R.layout.singersfragment, container, false);
    raw_List = (ListView) v.findViewById(R.id.raw_list);
    fname = (TextView) v.findViewById(R.id.title);
    return v;
}

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    activity = this.getActivity();
    f = new Functions(activity);
    Boolean unique = true;
    //set fonts
    fname.setTextSize(f.w(6));


    //get data
    final String json_data_string = getArguments().getString("json_data_string");

    messages = f.getMessages(json_data_string);
    //fill data
    Data.Raw[] messages = this.messages;
    Raw_List_Adapter adapter = new Raw_List_Adapter(activity,  GetUniqueLastNames(messages));
    raw_List.setAdapter(adapter);
    raw_List.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
            //add code here
              Bundle b = new Bundle();;
              b.putString("json_data_string",json_data_string);
              Fragment playpage = Fragment.instantiate(activity, Data_list_Fragment.class.getName(),b);
              FragmentTransaction ft = activity.getSupportFragmentManager().beginTransaction();
              ft.add(R.id.realtabcontent, playpage);
              ft.commit();

        }
    });

}
public static Data.Song[] GetUniqueLastNames(Data.Raw[] messages) {
    Set<Data.Raw> set = new HashSet<Data.Raw>();
    for (int i = 0; i < messages.length; i++) {
        set.add(messages[i]);
    }
    return set.toArray(new  Data.Raw[]{});
}}
public class Singers_List_Adapter extends ArrayAdapter<Object> {
FragmentActivity activity;
String json_categories_string;
Data.Raw[] messages;
public Singers_List_Adapter(FragmentActivity activity, Data.Raw[] messages) {
    super(activity, 0);
    this.activity = activity;
    this.messages = messages;
}

@Override
public View getView(final int position, View convertView, ViewGroup parent) {

    LayoutInflater inflator = activity.getLayoutInflater();
    convertView = inflator.inflate(R.layout.raw_item, null);
    TextView raw_title = (TextView) convertView.findViewById(R.id.raw_title);
    SmartImageView raw_image = (SmartImageView) convertView.findViewById(R.id.raw_image);
    raw_title.setText(Html.fromHtml(messages[position].amname));
    raw_image.setImageUrl(messages[position].imageurl, activity.getResources().getIdentifier(activity.getResources().getString(R.string.default_image), "drawable", activity.getPackageName()));
    Functions f = new Functions(activity);
    raw_title.setTextSize(f.w(6));

    return convertView;
}

@Override
public int getCount() {
    return messages.length;
}

@Override
public Data.Raw getItem(int position) {
    return messages[position];
}

@Override
public long getItemId(int position) {
    return 0;
}}

With this code when Item is clicked I am getting list of all data not specific ones with clicked Item. 使用此代码,单击“项目”后,我将获得所有数据列表,而不是单击的项目的特定数据。

You've mistaken in your item click listener in your onActivityCreated method : 您在onActivityCreated方法中误认为了项目单击侦听器:

raw_List.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
        //add code here
          Bundle b = new Bundle();;
          b.putString("json_data_string",json_data_string); // <--- this is the issue
          Fragment playpage = Fragment.instantiate(activity, Data_list_Fragment.class.getName(),b);
          FragmentTransaction ft = activity.getSupportFragmentManager().beginTransaction();
          ft.add(R.id.realtabcontent, playpage);
          ft.commit();

    }
});

Whenever you're going to get itemClickListener from any adapter then use it's listeners parameters for data fetching like : 每当您要从任何适配器获取itemClickListener时,都可以使用它的监听器参数进行数据提取,例如:

parent.getItemAtPosition(position)

instead of 代替

json_data_string

you'll need to cast it to your desired output, because it'll return you Object type. 您需要将其强制转换为所需的输出,因为它将返回Object类型。

So your change will be, 所以你的改变是

raw_List.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
    //add code here
      Bundle b = new Bundle();;
      b.putString("json_data_string",parent.getItemAtPosition(position)); // <--- updated line (Casting needed)
      Fragment playpage = Fragment.instantiate(activity, Data_list_Fragment.class.getName(),b);
      FragmentTransaction ft = activity.getSupportFragmentManager().beginTransaction();
      ft.add(R.id.realtabcontent, playpage);
      ft.commit();

}});

check this out for more info : AdapterView.OnItemClickListener 检查出更多信息: AdapterView.OnItemClickListener

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM