使用CustomAdapter OnClick ListView

时间:2017-01-07 07:37:48

标签: java android listview android-fragments

我使用CustomAdapter创建了一个ListView。一切都很完美,但是如何在点击某个项目时打开一个新片段。请告诉我该怎么做才能打开一个新的片段,它将通过一个图像和一个文本字段来获得listitem的描述。 班级档案:

package com.basil.victor;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ListView;

import java.io.IOException;
import java.io.InputStream;

public class Events extends Fragment {

private ListView listEvent;

String eventname[]={
    "Name",
    "of",
    "the",
    "events",
    "are",
    "present",
    "here"
};

String eventlogoname[]={
    "Logo",
    "name",
    "of",
    "events",
    "are",
    "present",
    "here"
};

Drawable[] arr=new Drawable[7];

String eventsubtitle []={
    "Subtitles",
    "of",
    "the",
    "events",
    "are",
    "present",
    "here"
};

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                     Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_events, null);



for(int i=0;i<7;i++) {
    try {
        InputStream stream = getContext().getAssets().open(eventlogoname[i] + ".jpg");
        Drawable el = Drawable.createFromStream(stream, null);
        arr[i] = el;
    } catch (IOException e) {
        e.printStackTrace();
    }
}

EventList adapter = new
        EventList(getActivity(), eventname, arr, eventsubtitle);
//ListView lv = (ListView)rootView.
listEvent=(ListView)view.findViewById(R.id.listEvent);
listEvent.setAdapter(adapter);


return view;
}
}

CustomListView适配器:

package com.basil.victor;
import android.app.Activity;
import android.graphics.drawable.Drawable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;

public class EventList extends ArrayAdapter<String>{

private final Activity context;
private final String[] title;
private final Drawable[] banner;
private final String[] subtitle;
public EventList(Activity context,
              String[] title, Drawable[] banner, String[] subtitle) {
super(context, R.layout.list_single, title);
this.context = context;
this.title = title;
this.banner = banner;
this.subtitle = subtitle;

}
@Override
public View getView(int position, View view, ViewGroup parent) {
LayoutInflater inflater = context.getLayoutInflater();
View rowView= inflater.inflate(R.layout.event_row, null, true);

TextView txtTitle = (TextView) rowView.findViewById(R.id.event_title);
ImageView imageView = (ImageView) rowView.findViewById(R.id.event_banner);
TextView subTitle = (TextView) rowView.findViewById(R.id.event_subtitle);


txtTitle.setText(title[position]);
imageView.setImageDrawable(banner[position]);
subTitle.setText(subtitle[position]);


return rowView;
}
}

3 个答案:

答案 0 :(得分:1)

Root Fragment:----

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentTransaction;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

public class RootFragment extends Fragment {

    private static final String TAG = "RootFragment";

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        /* Inflate the layout for this fragment */
        View view = inflater.inflate(R.layout.root_fragment, container, false);

        FragmentTransaction transaction = getFragmentManager()
                .beginTransaction();
        /*
         * When this container fragment is created, we fill it with our first
         * "real" fragment
         */
        transaction.replace(R.id.root_frame, new Events());

        transaction.commit();

        return view;
    }

} 

root fragment xml: -

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/root_frame" >

</FrameLayout>

你的片段

  package com.basil.victor;
    import android.graphics.drawable.Drawable;
    import android.os.Bundle;
    import android.support.v4.app.Fragment;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.ListView;

    import java.io.IOException;
    import java.io.InputStream;

    public class Events extends Fragment {

    private ListView listEvent;

    String eventname[]={
        "Name",
        "of",
        "the",
        "events",
        "are",
        "present",
        "here"
    };

    String eventlogoname[]={
        "Logo",
        "name",
        "of",
        "events",
        "are",
        "present",
        "here"
    };

    Drawable[] arr=new Drawable[7];

    String eventsubtitle []={
        "Subtitles",
        "of",
        "the",
        "events",
        "are",
        "present",
        "here"
    };

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_events, null);



    for(int i=0;i<7;i++) {
        try {
            InputStream stream = getContext().getAssets().open(eventlogoname[i] + ".jpg");
            Drawable el = Drawable.createFromStream(stream, null);
            arr[i] = el;
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    EventList adapter = new
            EventList(getActivity(), eventname, arr, eventsubtitle);
    //ListView lv = (ListView)rootView.
    listEvent=(ListView)view.findViewById(R.id.listEvent);
    listEvent.setAdapter(adapter);


         listEvent.setOnItemClickListener(new OnItemClickListener() {
                    public void onItemClick(AdapterView<?> parent, View view,
                            int position, long id) {

                 FragmentTransaction trans = getFragmentManager()
                        .beginTransaction();
                /*
                 * IMPORTANT: We use the "root frame" defined in
                 * "root_fragment.xml" as the reference to replace fragment
                 */
                trans.replace(R.id.root_frame, new SecondFragment());

                /*
                 * IMPORTANT: The following lines allow us to add the fragment
                 * to the stack and return to it later, by pressing back
                 */
                trans.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
                trans.addToBackStack(null);

                trans.commit();
                    }
                });

        return view;
        }
        }

答案 1 :(得分:1)

<form [formGroup]="ltsForm" novalidate (ngSubmit)="save()">
  <div formArrayName="products">
    <div *ngFor="let p of products.controls; let i=index">
      <input [formControlName]="i">
    </div>
  </div>
  <button type="submit" [disabled]="!ltsForm.valid">
    Submit
  </button>
</form>

...

export class CombinedComponent implements OnInit {

  ltsForm: FormGroup;

  get products() { return this.ltsForm.get('products'); }

  constructor(private formBuilder: FormBuilder) {}

  ngOnInit() {
      this.ltsForm = this.formBuilder.group({
        products: this.formBuilder.array([])
      });

      for (let i = 0; i < 3; ++i) {
        this.addProduct();
      }
  }

  addProduct() {
    this.products.push(this.formBuilder.control(''));
  }

  save() {
    console.log(this.ltsForm.value);
  }
} 

在你把这段代码放到另一个片段可能会有帮助。

答案 2 :(得分:0)

在您的事件片段中尝试此代码:

get.elbow.points.indices <- function(x, y, threshold) {
  d1 <- diff(y) / diff(x) # first derivative
  d2 <- diff(d1) / diff(x[-1]) # second derivative
  indices <- which(abs(d2) > threshold)  
  return(indices)
}

# first approximate the function, since we have only a few points
ap <- approx(x, y, n=1000, yleft=min(y), yright=max(y))
x <- ap$x
y <- ap$y

indices <- get.elbow.points.indices(x, y, 1e4) # threshold for huge jump = 1e4
x[indices]
#[1] 6.612851 # there is one such point
plot(x, y, pch=19)
points(x[indices], y[indices], pch=19, col='red')

在新片段中,您可以使用以下方式获取值:

 indices <- get.elbow.points.indices(x, y, 1e3) # threshold for huge jump = 1e3
 x[indices]
 #[1] 0.3409794 6.4353456 6.5931286 6.6128514 # there are 4 such points
 plot(x, y, pch=19)
 points(x[indices], y[indices], pch=19, col='red')